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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.