21

Я только что обновил 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

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

3 ответа3

22

Кажется, что есть совершенно другой метод для изменения лимита открытых файлов для каждой версии 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
    
20

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

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

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

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

Я проверил свою виртуальную машину 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 при обновлении.

12

В Mac OS 10.10 кажется, что настройка ulimit не может превышать настройку предела launchctl.

Таким образом, вы должны сначала запустить launchctl limit maxfiles в терминале, чтобы получить текущие настройки:

launchctl limit maxfiles
maxfiles    256            unlimited 

Таким образом, в моем случае мягкое ограничение составляет 256, жесткое ограничение не ограничено. И затем, если я хочу установить мягкое ограничение на 512:

sudo launchctl limit maxfiles 512 unlimited

Подробное использование launchctl для установки ограничений можно найти здесь:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .