dziwne zachowanie z ulimit w Mac OS X 10.6

8

Podczas pracy z ulimit dostaję bardzo dziwne zachowanie. Właśnie otworzyłem nową powłokę

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, wydaje się to być domyślne, nawet jeśli ustawiłem limit plików w /etc/launchd.conf na nieograniczony. Ale to kolejne pytanie na kolejny dzień.

Teraz zwiększam liczbę plików do 1024 i ponownie zajmuję się nowymi ustawieniami.

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

Okej, to działa. fajne! Teraz ponownie zmień ustawienia

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

Znowu to działa dobrze. Pozwala zmienić ponownie na pewną wyższą wartość

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

Co to do cholery jest teraz?

Jeśli spróbuję sudo, nie otrzymuję błędu, ale wartość też się nie zmienia.

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

Co tu się dzieje?

Jestem kompletnie zakłopotany!

Każda pomoc jest bardzo ceniona ...

Robertj

robertj
źródło

Odpowiedzi:

18

Mylą cię dwie rzeczy. Po pierwsze, istnieją twarde i miękkie limity dla każdego zasobu. ulimit -n 512ustawia oba z nich, ale ulimit -apokazuje tylko miękki limit. Po ustaleniu twardego limitu można go jedynie zmniejszyć.

$ 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

Drugą rzeczą, która Cię dezorientuje, jest to, że sudo ulimitnie robi tego, co myślisz. Odradza (główny) podproces, ustala limity otwartych plików dla tego podprocesu , a następnie wychodzi z podprocesu. Limity są ustawieniami dla poszczególnych procesów, więc sudo zmiany ich nie robi nic użytecznego.

Gordon Davisson
źródło
Cześć Gordon, dzięki za wspaniałe wytłumaczenie. Niestety nie mogę jeszcze głosować na twoją odpowiedź - ale to bardzo pomogło!
więc jeśli ustawiony jest twardy limit, w jaki sposób zwiększamy twardy limit?
greg
@greg: Nie sądzę, żebyś mógł - to czyni z tego trudny limit. W przypadku niektórych systemów operacyjnych, korzeń może podnieść sztywny limit na inne procesy, ale nie sądzę nawet, że jest to możliwe na OS X.
Gordon Davisson
Dzięki. Przypadkowo ustawiłem go za nisko, co praktycznie uniemożliwiło korzystanie z mojego systemu. Ponowne uruchomienie wydawało się to naprawić.
greg