Ограничение открытых файлов не работает, как раньше в OSX Yosemite

42403
AngocA

Я только что обновил Mac OS X до Yosemite, и теперь некоторые приложения не работают (IBM DB2). Я знаю, что мне нужно установить Открытые файлы на 65000, однако команда не работает.

Andress-MBP:~ root# ulimit -n 12288 Andress-MBP:~ root# ulimit -n 12289 -sh: ulimit: open files: cannot modify limit: Invalid argument 

Почему это происходит и как я могу исправить проблему?

20

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

22
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 
С нетерпением ждем нового ответа для macOS 10.13! :) NSTJ 7 лет назад 4
Процесс не работал для меня, пока я не перезапустил. Спасибо! это очень помогло user2773086 6 лет назад 1
В этой статье также говорится, что изменение этих файлов - это способ обновить ограничение на количество открытых файлов в Сьерре https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c Devin G Rhode 6 лет назад 0
Перезапуск необходим для работы лимитов (даже если шаг № 4 показывает обновленные значения) trinth 5 лет назад 1
19
user187561

Я вижу, вы задавали этот вопрос во всем.

Существует ограничение ядра, с которым вам приходится иметь дело, kern.maxfiles, который является пределом ядра и не может быть превышен при установке ulimit.

См. Страницу блога Krypted Maximum Files в Mac OS X для описания того, как управлять kern.maxifiles с помощью sysctl.

Я еще не загрузил Yosemite на свой Mac. В sysctl -w kern.maxfiles=65000работах по Mavericks, которая имеет то же kern.maxfiles = 12288 предела по умолчанию.

Я проверил на своей VM OS X 10.6.8, и у нее было то же самое ограничение, которое поднимает вопрос о том, как это работало до вашей версии OS X.

Существует слайд-ресурс ( DB2 для Mac OS X Установка и настройка DB2 для Mac OS X ), показывающий рекомендуемые ограничения для использования DB2, см. Увеличение системных параметров на странице 7.

Увеличить системные параметры

Откройте /etc/sysctl.conf (или создайте его, если он еще не существует) и вставьте следующие параметры. Эти параметры увеличивают некоторые параметры для общей памяти и ограничения пользователей, которые нужны DB2 для работы на Mac.

Добавьте следующее в /etc/sysctl.conf
kern.sysv.shmmax =
1073741824 kern.sysv.shmmin = 1
kern.sysv.shmmni = 4096
kern.sysv.shmseg = 32
kern.sysv.shmall = 1179648
kern.maxfilesperproc = 65536
kern.maxfiles = 65536

Похоже, вы потеряли свой /etc/sysctl.confфайл при обновлении.

На самом деле, я установил DB2 давно, и это сработало. Затем я обновился до Maverick в прошлом году, без каких-либо проблем. И сегодня я обновился до Yosemite и эта проблема появилась. Я не могу запустить мою уже установленную DB2. AngocA 9 лет назад 0
Другое дело, что мой sysctl.conf идентичен файлу, который вы положили в свой пост. Я создал первый раз, когда я установил DB2 (год назад), но я не трогал ее для миграции. AngocA 9 лет назад 0
Проблема была в некоторых пробелах в этом файле: https://www.ibm.com/developerworks/community/forums/html/topic?id=0597855f-0a90-46aa-be02-9fae4e93232f AngocA 9 лет назад 0
Замыкать пробелы, кто бы мог подумать. Предполагается, что у Apple одни из лучших программистов в мире. user187561 9 лет назад 1
@ user187561 `sysctl (8)` происходит из BSD. Drew Stephens 7 лет назад 0
И он полон перемен Apple. user187561 7 лет назад 0
Это спасло меня !! В настоящее время я использую свой Mac на El Capitan. Спасибо! Eric Olson 6 лет назад 0
12
imadcat

In Mac OS 10.10 it seems the ulimit setting can't exceed the launchctl limit setting.

So you should first run launchctl limit maxfiles in terminal to get the current setting:

launchctl limit maxfiles maxfiles 256 unlimited 

So in my case the soft limit is 256, the hard limit is unlimited. And then if i want to set the soft limit to 512:

sudo launchctl limit maxfiles 512 unlimited 

Detailed usage of launchctl for setting limits can be found here: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

«launchctl limit maxfiles 512 unlimited», по-видимому, устанавливает мои (мягкие, жесткие) ограничения на (512,10240) для Yosemite 10.10.5 2015-09-30 Dave X 8 лет назад 0
«launchctl limit maxfiles unlimited unlimited; launchctl limit maxfiles» указывает, что 10240 является наибольшим лимитом, который может быть введен. Использование больших чисел молча не удается, оставляя настройку как прежде. Dave X 8 лет назад 2