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

111846
Chris Poole

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

sudo ulimit -n 12288так высоко, как снежный барс хочет идти; помимо этого приводит к

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

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

96
Ответы на этот вопрос больше не работают в OSX Mavericks. Howard 10 лет назад 4
Запуск `echo limit maxfiles 10000 10000 | sudo tee -a / etc / launchd.conf` и перезапуск работает для меня в Mavericks. user495470 9 лет назад 2

6 ответов на вопрос

90
Gordon Davisson

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

sudo launchctl limit maxfiles 1000000 1000000 

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

limit maxfiles 1000000 1000000 

Затем вы можете использовать ulimit(но без sudo), чтобы настроить ограничение процесса.

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

`sudo launchctl limit maxfiles 1000000 unlimited` Не может быть неограниченным ни жесткое, ни мягкое ограничение для" maxfiles ". Пожалуйста, используйте числовой параметр для обоих. Thomas Hunter 10 лет назад 0
Будьте осторожны при добавлении этой строки в `launchd.conf`. Я думаю, что если число слишком мало, это может сделать ваш компьютер непригодным для использования. Например, я использовал `limit maxfiles 1024 1024`, и мне было очень трудно вернуть его обратно. Shawn 9 лет назад 2
Увы: «Файл /etc/launchd.conf больше не используется для подкоманд, запускаемых во время ранней загрузки; эта функциональность была удалена из соображений безопасности». Alice Purcell 8 лет назад 1
Это не работает, мой номер fd не может превышать 6k, даже если я успешно установил ulimit -Sn 10240. Jian Weihang 8 лет назад 0
@JianWeihang fd числа для каждого процесса, поэтому я предполагаю, что в других процессах было открыто 4000 файлов. Вам довелось запустить Chrome? ;) Trejkaz 6 лет назад 0
41
errant.info

The following should resolve most solutions (and are listed in order of their hierarchy):

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 

Notes:

  1. You will need to restart for these changes to take effect.
  2. AFAIK you can no longer set limits to 'unlimited' under OS X
  3. launchctl maxfiles are bounded by sysctl maxfiles, and therefore cannot exceed them
  4. sysctl seems to inherit kern.maxfilesperproc from launchctl maxfiles
  5. ulimit seems to inherit it's 'open files' value from launchctl by default
  6. you can set a custom ulimit within /etc/profile, or ~/.profile ; while this isn't required I've provided an example
  7. Be cautious when setting any of these values to a very high number when compared with their default - the features exist stability/security. I've taken these example numbers that I believe to be reasonable, written on other websites.
Увы: «Файл /etc/launchd.conf больше не используется для подкоманд, запускаемых во время ранней загрузки; эта функциональность была удалена из соображений безопасности». Alice Purcell 8 лет назад 2
28
ninjaPixel

Кажется, что есть совершенно другой метод для изменения лимита открытых файлов для каждой версии OS X!

Для OS X Sierra (10.12.X) вам необходимо:

1. Library/LaunchDaemonsСоздайте файл с именем limit.maxfiles.plistи вставьте в него следующее (не стесняйтесь менять два числа (это мягкие и жесткие ограничения соответственно):

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">  <dict> <key>Label</key> <string>limit.maxfiles</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxfiles</string> <string>64000</string> <string>524288</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>  

2. Измените владельца вашего нового файла:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist 

3. Загрузите эти новые настройки:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist 

4. Наконец, проверьте правильность лимитов:

launchctl limit maxfiles 
Этот ответ великолепен, и я нашел кое-что для добавления здесь, @ninjaPixel: http://blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan/ Dean Radcliffe 7 лет назад 2
20
crishoj

Похоже, что 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 
Если одно из значений было * unlimited *, использование `-1` в качестве значения приводит к` 12288`. Можно использовать большие числовые значения, например, `sudo launchctl limit maxfiles 15000 150000`. Я не уверен, что эти настройки имеют эффект тогда, хотя. Daniel Beck 12 лет назад 3
7
Clustermagnet

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

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 
Подумайте о пересмотре вашего решения. Вы устанавливаете ulimit 1024, а затем показывает дескрипторы выходного файла как 8192 (должно быть 1024). Ваш подход также пробелматичен без sudo, попробуйте изменить его несколько раз для себя. y3sh 9 лет назад 2
sudo не следует использовать здесь, но этот ответ неверен. Пользователи Mavericks должны использовать `` `echo limit maxfiles 10000 10000 | sudo tee -a / etc / launchd.conf``` и затем перезагрузить компьютер Kyle Chadha 9 лет назад 1
0
kenorb

Некоторые ограничения не могут быть изменены ulimit, потому что они применяются только к текущей оболочке, поэтому launchctlкоманда должна использоваться для изменения ограничений глобально, например

sudo launchctl limit maxfiles 100000 unlimited 

Обратите внимание, что применение этих ограничений в /etc/launchd.conf(как предлагается в других ответах) больше не поддерживается в последних выпусках macOS. Хотя все еще можно использовать launchd.plist(см . man launchd.plist:), такие как plistфайлы конфигурации для пользователя или всей системы, как предлагается здесь и там .


Чтобы сделать эти ограничения постоянными, вы можете использовать /etc/sysctl.confфайл и добавить, например:

kern.maxprocperuid=1000 kern.maxproc=2000 kern.maxfilesperproc=20000 kern.maxfiles=50000 

Чтобы изменения вступили в силу, требуется перезагрузка.

Чтобы увидеть текущие ограничения, запустите: launchctl limitили sysctl -a | grep ^kern.max.

Смотрите также: Как сохранить настройки ulimit в macOS?

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