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

22

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

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

AngocA
источник

Ответы:

25

Кажется, что существует совершенно другой метод для изменения лимита открытых файлов для каждой версии 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
источник
7
С нетерпением ждем нового ответа для macOS 10.13! :)
NSTJ
1
Процесс не работал для меня, пока я не перезапустил. Благодарность! это очень помогло
user2773086
В этой статье также говорится, что изменение этих файлов - это способ обновить ограничение на количество открытых файлов для Sierra gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
Девин Г. Род
1
Перезапуск необходим для работы пределов (даже если шаг # 4 действительно показывает обновленные значения)
тринадцатое
21

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

Существует ограничение ядра, с которым вам приходится иметь дело, 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файл при обновлении.

user187561
источник
На самом деле, я установил DB2 давно, и это сработало. Затем я обновился до Maverick в прошлом году, без каких-либо проблем. И сегодня я обновился до Yosemite и эта проблема появилась. Я не могу запустить мою уже установленную DB2.
AngocA
Другое дело, что мой sysctl.conf идентичен файлу, который вы положили в свой пост. Я создал первый раз, когда я установил DB2 (год назад), но я не трогал ее для миграции.
AngocA
Проблема была несколько blankspaces в этом файле: ibm.com/developerworks/community/forums/html/...
AngocA
1
Замыкать пробелы, кто бы мог подумать. Предполагается, что у Apple одни из лучших программистов в мире.
user187561
@ user187561 sysctl(8)происходит из BSD.
Дрю Стивенс
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

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