дивна поведінка з ulimit на Mac OS X 10.6


8

Я отримую дуже дивну поведінку під час роботи з ulimit. Я просто відкриваю нову оболонку

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

Гаразд, це, здається, є типовим, навіть якщо я встановив обмеження на файли в /etc/launchd.conf необмеженим. Але це ще одне питання для іншого дня.

Тепер я збільшую кількість файлів до 1024 і дозволяю знову переглянути нові налаштування.

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

Гаразд, це працює. круто! Тепер давайте знову змінити налаштування

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

Знову це прекрасно працює. Дозволяє знову змінитись на деяке вище значення

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

Що це за зараз ***?

Якщо я спробую зробити це, я не отримую помилки, але значення також не змінюється.

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

Що тут відбувається?

Я повністю спотикався!

Будь-яка допомога дуже вдячна ...

Роберт

Відповіді:


18

Дві речі вас бентежать. Перший полягає в тому, що для кожного ресурсу існують як жорсткі, так і м'які межі. ulimit -n 512встановлює обидва , але ulimit -aпоказує лише м'яку межу. Після встановлення жорсткої межі її можна лише знизити.

$ 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

Друге, що вас бентежить, - це те, sudo ulimitщо не робить те, що, на вашу думку, робить. Він породжує (root) підпроцес, встановлює обмеження для відкритого файлу для цього підпроцесу , а потім виходить з підпроцесу. Обмеження - це налаштування за кожний процес, тому внесення змін до них не робить нічого корисного.


Привіт Гордоне, дякую за чудове пояснення. На жаль, я ще не можу відповісти на вашу відповідь - але це дуже допомогло!

тож якщо встановлено жорстку межу, як ми збільшуємо жорстку межу?
greg

@greg: Я не думаю, що ти можеш - саме це робить її жорсткою межею. У деяких ОС ОС root може підняти жорсткий ліміт для інших процесів, але я не думаю, що навіть це можливо в OS X.
Гордон Девіссон

Дякую. Я випадково встановив його занадто низьким, що в значній мірі зробило мою систему непридатною. Перезавантаження, здавалося, це виправило.
greg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.