Ограничение открытых файлов не работает, как раньше в 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

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

Ответы:


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
    

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файл при обновлении.


На самом деле, я установил 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


«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 является наибольшим лимитом, который может быть введен. Использование больших чисел молча не удается, оставляя настройку как прежде.
Дэйв Икс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.