Увеличение лимита maxfile в Yosemite для приложения

5509
toadstool333

Я пытался увеличить предел maxfile и maxfileperproc на Yosemite, но безуспешно. Я создал файл sysctl.conf в папке etc, который успешно увеличил значения при отображении через grep.

Тем не менее, если я посмотрю на launchctl limit maxfiles, значение по-прежнему неверно.

Некоторые решения, похоже, используют ulimit -n для установки предела, но когда я в терминале, я не могу его использовать. Это дает мне ошибку «Неверный аргумент» или «Несанкционированная операция». Я успешно увеличил ulimit с помощью сценария bash_profile, но поскольку приложение запускается из приложения, а не из оболочки, оно не имеет значения. Я также успешно увеличил ulimit через пользователя root, но когда он вышел из системы, он не сохраняет изменения.

В идеале я ищу что-то, что работает так же, как и файл launchd.conf, и просто автоматически увеличивает максимальный размер launchctl {#} при перезагрузке.

Есть ли способ сделать это успешно? Может быть, с помощью стороннего производителя, такого как Lingon, или с демоном запуска?

Спасибо!

5

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

8
mbb

Я понял это благодаря игре с Риаком из Basho . Направления для Йосемити являются:


Чтобы настроить ограничения открытых файлов в масштабе всей системы в Mac OS X Yosemite, необходимо создать два файла конфигурации.

Первый - это файл списка свойств (он же plist), в /Library/LaunchDaemons/limit.maxfiles.plistкотором содержится следующая конфигурация XML:

<?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>65536</string> <string>65536</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist> 

Это установит ограничение на количество открытых файлов в 65536. Второй файл конфигурации plist должен храниться /Library/LaunchDaemons/limit.maxproc.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.maxproc</string> <key>ProgramArguments</key> <array> <string>launchctl</string> <string>limit</string> <string>maxproc</string> <string>2048</string> <string>2048</string> </array> <key>RunAtLoad</key> <true /> <key>ServiceIPC</key> <false /> </dict> </plist> 

Оба файла plist должны принадлежать root:wheelи иметь права доступа -rw-r--r--. Эти разрешения должны быть по умолчанию, но вы можете убедиться, что они есть, запустив их sudo chmod 644 <filename>. Несмотря на то, что описанные выше шаги приведут к тому, что ограничения на общесистемные открытые файлы будут правильно установлены при перезапуске, вы можете применить их вручную, запустив launchctl limit.

В дополнении к установке этих пределов на уровне системы, мы рекомендуем установить на уровне сеанса, а также путем добавлении следующих строк в ваш bashrc, bashprofileили аналогичный файл:

ulimit -n 65536 ulimit -u 2048 

Как и файлы plist, ваш bashrcили аналогичный файл должен иметь -rw-r--r--права доступа. В этот момент вы можете перезагрузить компьютер и войти ulimit -nв свой терминал. Если ваша система настроена правильно, вы должны увидеть, что для maxfiles установлено значение 65536.


Процесс немного отличается в другой версии OS X, но также хорошо документирован этой командой. Опять же, спасибо команде Basho за документирование этого процесса.

Просто прошел через это, и я могу подтвердить, что это работает (10.10.2), но есть пара замечаний: 1) требуется перезагрузка. запуск `launchctl limit` у меня не сработал, 2) Эти две команды ulimit не работают до перезапуска (и я думаю, что они не нужны?), я просто проигнорировал эту часть. Cory Mawhorter 9 лет назад 0
Исходя из моих тестов, максимально допустимое значение maxproc в Yosemite составляет 2500. «launchctl limit maxproc 2500» работает, но любые большие значения игнорируются. Я уверен, что это где-то в документации ... 9 лет назад 1
@JLG Полезно знать. Учитывая, что отправная точка на моем MacPro кажется 1064, это всего лишь 2,5 x, что очень печально по сравнению с моей надеждой на то, что я смогу получить до 10-15 тыс. Процессов для поддержки 20 с лишним пользователей-роботов, использующих параллельные симуляторы iOS , Похоже, нам придётся охотиться за некоторыми из старых 8-ядерных mac minis и кластеризовать их. android.weasel 8 лет назад 0
На самом деле, это был не Mac Pro - это Mac Pro, загружающийся с Mac Mini, изображающий из себя жесткий диск. Может быть, есть актуальная серверная версия MacOs, которая может пойти выше? android.weasel 8 лет назад 0

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