strano comportamento con ulimit su Mac OS X 10.6


8

Ottengo un comportamento molto strano quando lavoro con ulimit. Ho appena aperto una nuova shell

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, sembra essere il valore predefinito anche se ho impostato il limite sui file all'interno di /etc/launchd.conf in modo che sia illimitato. Ma questa è un'altra domanda per un altro giorno.

Ora aumento il numero di file a 1024 e dò un'occhiata alle nuove impostazioni.

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

Va bene, funziona. freddo! Ora consente di modificare nuovamente le impostazioni

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

Ancora una volta funziona bene. Consente di modificare nuovamente un valore più elevato

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

Che cazzo è questo adesso?

Se provo a farlo, non ottengo un errore, ma neanche il valore viene modificato.

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

Cosa sta succedendo qui?

Sono completamente perplesso!

Qualsiasi aiuto è molto apprezzato...

Robertj

Risposte:


18

Ci sono due cose che ti confondono. Il primo è che ci sono limiti sia hard che soft per ogni risorsa. ulimit -n 512imposta entrambi , ma ulimit -amostra solo il limite soft. Una volta impostato il limite rigido, può essere solo ridotto.

$ 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 seconda cosa che ti confonde è che sudo ulimitnon fa quello che pensi che faccia. Genera un sottoprocesso (root), imposta i limiti del file aperto per quel sottoprocesso , quindi esce dal sottoprocesso. I limiti sono un'impostazione per processo, quindi rinunciare a una modifica non fa nulla di utile.


Ciao Gordon, grazie per l'ottima spiegazione. Purtroppo non posso ancora votare la tua risposta, ma mi ha aiutato molto!

quindi se viene impostato un limite rigido, come possiamo aumentare il limite rigido?
Greg

@greg: non penso che tu possa - questo è ciò che lo rende un limite difficile. Su alcuni sistemi operativi, il root può aumentare il limite per altri processi, ma non credo che sia nemmeno possibile su OS X.
Gordon Davisson

Grazie. L'ho impostato accidentalmente troppo basso, il che ha reso praticamente inutilizzabile il mio sistema. Un riavvio sembrava risolverlo.
Greg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.