2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

¿Aumentar el número máximo de descriptores de archivo abiertos en Snow Leopard?

Estoy tratando de hacer algo que requiere un gran número de descriptores de archivo

sudo ulimit -n 12288 es lo máximo que quiere Snow Leopard; más allá de esto resulta en

/usr/bin/ulimit: línea 4: ulimit: open files: cannot modify limit: Invalid argument.

Quiero aumentar el número mucho más, digamos 100000. ¿Es posible?

Respuestas (4)

95
95
95
2011-06-27 21:17:50 +0000

El uso del comando ulimit sólo cambia los límites de recursos para el shell actual y sus hijos, y sudo ulimit crea un shell raíz, ajusta sus límites y luego sale (por lo que no tiene, hasta donde yo puedo ver, ningún efecto real).
Para exceder el 12288, necesita ajustar los parámetros kern.maxfiles y kern.maxfilesperproc del kernel, y también (al menos de acuerdo con esta entrada del blog , que es un resumen de esta discusión ) un límite de launchd. Puede usar launchctl limit para ajustar todo esto a la vez:

sudo launchctl limit maxfiles 1000000 1000000

Para hacer esto permanente (es decir, que no se reinicie cuando se reinicie), cree /etc/launchd.conf que contenga:

limit maxfiles 1000000 1000000

Entonces puede usar ulimit (pero sin el sudo) para ajustar su límite de proceso.

Si esto no lo hace, es posible que te encuentres con límites de tamaño en el kernel. Si su modelo lo soporta , arrancar el kernel en modo de 64 bits puede ayudar.

42
42
42
2012-12-03 12:07:46 +0000

Lo siguiente debería resolver la mayoría de las soluciones (y se enumeran en orden de su jerarquía):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Notas:

  1. Deberá reiniciar para que estos cambios surtan efecto.
  2. launchctl maxfiles está limitado por sysctl maxfiles, y por tanto no puede excederlos
  3. sysctl parece heredar kern.maxfilesperproc de launchctl maxfiles
  4. ulimit parece heredar su valor de ‘open files’ de launchctl por defecto
  5. puede establecer un ulimit personalizado dentro de /etc/profile, o ~/.profile ; aunque no es necesario, he proporcionado un ejemplo
  6. Tenga cuidado al establecer cualquiera de estos valores a un número muy alto en comparación con su valor por defecto - las características existen estabilidad/seguridad. He tomado estos números de ejemplo que creo que son razonables, escritos en otros sitios web.
20
20
20
2011-12-10 10:11:12 +0000

Parece que OS X Lion no permite “ilimitado” como valor:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

Proporcionando valores numéricos tanto para el límite suave como para el duro funciona:

% sudo launchctl limit maxfiles 4096 8192
3
3
3
2018-12-21 14:43:27 +0000

En OS X 10.13.6 esto me funciona:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576