2011-06-27 10:56:47 +0000 2011-06-27 10:56:47 +0000
102
102

Увеличить максимальное количество открытых файловых дескрипторов в Snow Leopard?

Я пытаюсь сделать что-то, что требует большого количества файловых дескрипторов

sudo ulimit -n 12288, столько же, сколько хочет Snow Leopard; кроме того, это приводит к

/usr/bin/ulimit: строке 4: ulimit: открытым файлам нельзя изменять limit: недействительный аргумент.

Я хочу поднять число намного выше, скажем, 100000. Возможно ли это?

Ответы (5)

95
95
95
2011-06-27 21:17:50 +0000

Использование команды ulimit только изменяет лимиты ресурсов для текущей оболочки и ее дочерних процессов, а команда sudo ulimit создает корневую оболочку, настраивает ее лимиты, а затем выходит (таким образом, насколько я вижу, никакого реального эффекта нет).
Чтобы превысить 12288, вам нужно настроить параметры ядра kern.maxfiles и kern.maxfilesperproc, а также (по крайней мере, в соответствии с этой записью в блоге , которая является кратким изложением этого обсуждения ) лимит запуска. Вы можете использовать launchctl limit для настройки всех этих параметров одновременно:

sudo launchctl limit maxfiles 1000000 1000000

Чтобы сделать это постоянным (т.е. не сбрасывать при перезагрузке), создайте /etc/launchd.conf, содержащий:

limit maxfiles 1000000 1000000

Then вы можете использовать ulimit (но без sudo) для настройки лимита вашего процесса.

Если этого не происходит, вы можете столкнуться с ограничениями по размеру в ядре. Если ваша модель поддерживает это , то может помочь загрузка ядра в 64-битном режиме .

42
42
42
2012-12-03 12:07:46 +0000

Большинство решений (и перечислены в порядке их иерархии) должны разрешаться следующим образом:

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Примечания:

  1. Чтобы эти изменения вступили в силу, необходимо перезапустить.
  2. AFAIK вы больше не можете устанавливать лимиты на “неограниченные” под OS X
  3. maxfiles launchctl ограничены sysctl maxfiles, а значит, не могут превышать их
  4. sysctl, похоже, наследует kern.maxfilesperproc от launchctl maxfiles
  5. ulimit, похоже, наследует от launchctl значение ‘open files’ по умолчанию
  6. Вы можете установить пользовательский ulimit в /etc/profile, или ~/.profile ; хотя это и не требуется, я представил пример
  7. Будьте осторожны при установке любого из этих значений в очень большое число по сравнению с их значением по умолчанию - функции существуют стабильность/безопасность. Я взял эти примеры чисел, которые я считаю разумными, написанные на других сайтах.
20
20
20
2011-12-10 10:11:12 +0000

Похоже, что OS X Lion не позволит “неограниченное” значение:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

Предоставление числовых значений как для “мягкого”, так и для “жесткого” предела делает работу:

% sudo launchctl limit maxfiles 4096 8192
8
8
8
2014-09-04 15:44:30 +0000

На Mavericks это просто. Как обычный пользователь:

ulimit -n 8192

Вы можете проверить обновленные настройки через

ulimit -a

На моей машине:

ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 8192
3
3
3
2018-12-21 14:43:27 +0000

На OS X 10.13.6 это работает на меня:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

Похожие вопросы

12
5
13
8
8