comportement étrange avec ulimit sur Mac OS X 10.6

8

J'ai un comportement très étrange lorsque je travaille avec ulimit. Je viens d'ouvrir un nouveau 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, cela semble être la valeur par défaut même si je fixe la limite sur les fichiers dans /etc/launchd.conf pour qu'ils ne soient pas limités. Mais c'est une autre question pour un autre jour.

Maintenant, j'augmente le nombre de fichiers à 1024 et j'examine à nouveau les nouveaux paramètres.

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

D'accord, ça marche. cool! Permet maintenant de modifier à nouveau les paramètres

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

Encore une fois, cela fonctionne bien. Permet de changer à nouveau à une valeur plus élevée

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

Qu'est-ce que c'est que ça maintenant?

Si j'essaye de le faire, je n'ai pas d'erreur, mais la valeur n'est pas modifiée non plus.

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

Qu'est-ce qui se passe ici?

Je suis complètement perplexe!

Toute aide est grandement appréciée...

Robertj

robertj
la source

Réponses:

18

Il y a deux choses qui vous déroutent. Le premier est qu'il existe des limites strictes et non strictes pour chaque ressource. ulimit -n 512définit les deux , mais ulimit -aaffiche uniquement la limite souple. Une fois la limite stricte définie, elle ne peut être diminuée.

$ 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 deuxième chose qui vous déroute, c'est que sudo ulimitcela ne fait pas ce que vous pensez que cela fait. Il génère un sous-processus (racine), définit les limites de fichier ouvert pour ce sous-processus , puis quitte le sous-processus. Les limites sont un paramètre par processus, donc le fait de les modifier ne fait rien d'utile.

Gordon Davisson
la source
Salut Gordon, merci pour la grande explication. Malheureusement, je ne peux pas encore voter pour votre réponse - mais cela a beaucoup aidé!
donc si une limite stricte est fixée, comment pouvons-nous augmenter la limite stricte?
Greg
@greg: Je ne pense pas que vous puissiez - c'est ce qui en fait une limite stricte. Sur certains systèmes d'exploitation, root peut augmenter la limite stricte sur d'autres processus, mais je ne pense pas que cela soit possible sous OS X.
Gordon Davisson
Merci. Je l'ai accidentellement réglé trop bas, ce qui a rendu mon système inutilisable. Un redémarrage a semblé le réparer.
Greg