seltsames Verhalten mit ulimit unter Mac OS X 10.6

8

Ich bekomme ein sehr seltsames Verhalten, wenn ich mit ulimit arbeite. Ich öffne gerade eine neue 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, das scheint die Standardeinstellung zu sein, auch wenn ich das Limit für Dateien in /etc/launchd.conf auf unbegrenzt festgelegt habe. Aber das ist eine andere Frage für einen anderen Tag.

Jetzt erhöhe ich die Anzahl der Dateien auf 1024 und schaue mir die neuen Einstellungen noch einmal an.

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

Okay, das funktioniert. cool! Jetzt können Sie die Einstellungen erneut ändern

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

Auch das funktioniert gut. Wechseln wir wieder zu einem höheren Wert

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

Was zum Teufel ist das jetzt?

Wenn ich versuche, dies zu sudo, erhalte ich keine Fehlermeldung, aber der Wert wird auch nicht geändert.

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

Was geht hier vor sich?

Ich bin völlig ratlos!

Jede Hilfe wird sehr geschätzt ...

Robertj

robertj
quelle

Antworten:

18

Es gibt zwei Dinge, die Sie verwirren. Das erste ist, dass es für jede Ressource sowohl harte als auch weiche Grenzen gibt. ulimit -n 512Setzt beide , ulimit -azeigt aber nur die weiche Grenze an. Sobald das harte Limit festgelegt ist, kann es nur noch verringert werden.

$ 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

Das zweite, was Sie verwirrt, ist, dass sudo ulimites nicht das tut, was Sie denken. Es erzeugt einen (Root-) Unterprozess, legt die Grenzwerte für geöffnete Dateien für diesen Unterprozess fest und beendet dann den Unterprozess. Die Grenzwerte sind pro Prozess festgelegt, sodass eine Änderung nicht sinnvoll ist.

Gordon Davisson
quelle
Hallo Gordon, danke für die tolle Erklärung. Leider kann ich Ihre Antwort noch nicht positiv bewerten - aber es hat sehr geholfen!
Wenn also ein hartes Limit festgelegt ist, wie erhöhen wir das harte Limit?
Greg
@greg: Ich glaube nicht, dass du kannst - das macht es zu einer harten Grenze. Unter einigen Betriebssystemen kann root die harte Grenze für andere Prozesse erhöhen, aber ich denke nicht, dass dies unter OS X möglich ist.
Gordon Davisson
Vielen Dank. Ich habe es versehentlich zu niedrig eingestellt, was mein System ziemlich unbrauchbar machte. Ein Neustart schien das Problem zu beheben.
Greg