comportamiento extraño con ulimit en Mac OS X 10.6

8

Obtengo un comportamiento muy extraño cuando trabajo con ulimit. Acabo de abrir un nuevo caparazón

Hector:~ robertj$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited 
open files                      (-n) 256 
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 532
virtual memory          (kbytes, -v) unlimited

Ok, ese parece ser el valor predeterminado, incluso si configuro el límite de archivos dentro de /etc/launchd.conf para que sea ilimitado. Pero esa es otra pregunta para otro día.

Ahora aumento el número de archivos a 1024 y vuelvo a echar un vistazo a la nueva configuración.

 Hector:~ robertj$ ulimit -n 1024
 Hector:~ robertj$ ulimit -a | grep open
 open files                      (-n) 1024

De acuerdo, eso funciona. ¡frio! Ahora cambiemos la configuración nuevamente

Hector:~ robertj$ ulimit -n 512
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512

De nuevo, eso funciona muy bien. Vamos a cambiar nuevamente a un valor más alto

Hector:~ robertj$ ulimit -n 1024
-bash: ulimit: open files: cannot modify limit: Operation not permitted
Hector:~ robertj$ 

¿Qué demonios es esto ahora?

Si intento sudo esto, no obtengo un error, pero el valor tampoco cambia.

Hector:~ robertj$ sudo ulimit -n 1024
Password:
Hector:~ robertj$ ulimit -a | grep open
open files                      (-n) 512
Hector:~ robertj$ 

¿Que esta pasando aqui?

Estoy completamente perplejo!

Cualquier ayuda es muy apreciada...

Robertj

robertj
fuente

Respuestas:

18

Hay dos cosas que te confunden. El primero es que hay límites duros y blandos para cada recurso. ulimit -n 512establece ambos , pero ulimit -asolo muestra el límite flexible. Una vez que se establece el límite estricto, solo se puede disminuir.

$ ulimit -n
256
$ ulimit -Hn  # There's no initial hard limit
unlimited
$ ulimit -n 512  # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024  # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted

La segunda cosa que te confunde es que sudo ulimitno hace lo que crees que hace. Genera un subproceso (raíz), establece los límites de archivos abiertos para ese subproceso y luego sale del subproceso. Los límites son una configuración por proceso, por lo que suponer un cambio en ellos no hace nada útil.

Gordon Davisson
fuente
Hola Gordon, gracias por la gran explicación. Lamentablemente, aún no puedo votar tu respuesta, ¡pero me ayudó mucho!
Entonces, si se establece un límite rígido, ¿cómo aumentamos el límite rígido?
greg
@greg: No creo que puedas, eso es lo que lo convierte en un límite difícil. En algunos sistemas operativos, la raíz puede aumentar el límite estricto en otros procesos, pero no creo que eso sea posible en OS X.
Gordon Davisson
Gracias. Accidentalmente lo configuré demasiado bajo, lo que prácticamente inutilizó mi sistema. Un reinicio pareció arreglarlo.
greg