macos - recientes - finder no muestra archivos
Número máximo de manejadores de archivos abiertos por proceso en OSX(y cómo aumentar) (2)
EDITAR: ahora tengo una solución, pero realmente me gustaría describir conciso cuáles son los diferentes límites, es decir, los establecidos por FD_SIZE, los archivos de límite de launchtl, sysctl -w kern.maxfilesperproc, ulimit, etc.
¿Alguien puede ayudarme a entender los límites en filehandles abiertos en OSX? ulimit me da una respuesta:
$ ulimit -a
...
open files (-n) 256
No puedo usar ulimit
para cambiar esto, pero la gente sugiere usar launchctl
(por ejemplo, http://usrinapto.wordpress.com/2010/03/06/mac-os-x-10-6-max-open-files-too-many-open-files/ )
Sin embargo, usar esto no cambia el límite informado por ulimit
.
Sin embargo, parece que mi aplicación puede abrir 10k archivos antes de bloquearse, como lo informa lsof
, por ejemplo:
$ lsof -p 87599 | wc
10279 92505 1418903
(se bloquea en algún lugar entre 10279 y 10305 archivos abiertos, de manera confiable)
Entonces, claramente hay límites diferentes para jugar. También he visto hablar (en el enlace de arriba) de FD_SETSIZE
.
¿Puede alguien explicarme cuáles son los diferentes límites y cómo se configuran?
En caso de que sea relevante, estoy trabajando en el ajuste de una biblioteca C / C ++ para su uso en Java, usando SWIG.
EDITAR: También he intentado:
sudo sysctl -w kern.maxfiles=20000
sin éxito también
#define FD_SETSIZE 20000
no tiene efecto.
EDITAR: También intenté
launchctl limit maxfiles 20000 20000
sin efecto
EDITAR: Solución:
sysctl -w kern.maxfilesperproc=20000
(a través de http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/ )
EDITAR: He escrito un pequeño programa para probar esto (basado en Cómo aumentar el límite de "máximo de archivos abiertos" en C en Mac OS X ), y encontré que el número máximo de archivos abiertos que puedo pedir es 10240:
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
struct rlimit limit;
void setLimit( int l );
void getLimit();
int main( int argc, char* argv[] )
{
getLimit();
setLimit(10240);
getLimit();
return 1;
}
void setLimit( int lim )
{
limit.rlim_cur = lim;
limit.rlim_max = lim;
printf( "Setting limit to %d, %d/n", limit.rlim_cur, limit.rlim_max );
if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
printf("setrlimit() failed with errno=%d/n", errno);
exit(1);
}
}
void getLimit()
{
/* Get max number of files. */
if (getrlimit(RLIMIT_NOFILE, &limit) != 0)
{
printf("getrlimit() failed with errno=%d/n", errno);
exit(1);
}
printf("The soft limit is %llu/n", limit.rlim_cur);
printf("The hard limit is %llu/n", limit.rlim_max);
}
Para verificar los límites en su ejecución del sistema: ''launchctl limit''. Para cambiar el número máximo de archivos abiertos, ejecute: ''launchctl limit maxfiles 400000 unlimited''. Para cambiar la configuración permanentemente agregue al archivo: ''/etc/launchd.conf'' siguiente línea:
límite maxfiles 400000
ilimitado
( source )
... y ¿por qué necesitas tantos archivos abiertos a la vez?
encontrado en http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/ :
sysctl -w kern.maxfilesperproc=20000