Есть ли исправление ошибки «Слишком много открытых файлов в системе» в OS X 10.7.1?

Есть ли исправление ошибки «Слишком много открытых файлов в системе» в OS X 10.7.1?

Мне нужно избавиться от надоедливого ограничения «Слишком много открытых файлов в системе» в OS X 10.7.1. 

Есть ли способ?

решение1

В соответствии сэта полезная статья(рекомендую прочитать):

По умолчанию максимальное количество файлов, которые может открыть Mac OS X, составляет 12 288, а максимальное количество файлов, которые может открыть данный процесс, составляет 10 240.

Вы можете проверить это с помощью:

  • sysctl kern.maxfiles
  • sysctl kern.maxfilesperproc

Вы можете увеличить лимиты (на свой страх и риск) следующим образом:

  • sysctl -w kern.maxfiles=20480(или любое другое число по вашему выбору)
  • sysctl -w kern.maxfilesperproc=18000(или любое другое число по вашему выбору)

Чтобы сделать изменение постоянным, используйте sudoдля внесения своих настроек /etc/sysctl.conf(которые вам, возможно, придется создать), например:

kern.maxfiles=20480
kern.maxfilesperproc=18000

Примечание: в OS X 10.10 или ниже вы можете добавить настройку в /etc/launchd.conflike limit maxfiles, и она переопределит все, что вы введете здесь.

Опять же, из статьи:

После того, как вы это сделаете, само ядро ​​будет иметь максимальное количество файлов, но оболочка может не иметь. И поскольку большинство процессов, которые будут занимать столько файлов, будут инициированы оболочкой, вам нужно будет увеличить это количество.

Команда для этого следующая:

ulimit -S -n 2048 # or whatever number you choose

Это изменение также временное; оно длится только в течение текущего сеанса оболочки. Вы можете добавить его в файл конфигурации оболочки ( .bashrcили .zshrcчто-то еще), если хотите, чтобы оно запускалось каждый раз при открытии оболочки.

решение2

Похоже, что для каждой версии 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

решение3

Другим вариантом может быть поиск виновника:

sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail

В последнем случае вы можете увидеть, какие файлы открыты:

sudo lsof -n | grep socketfil

И убить процесс, если это необходимо.

kill $pid

Из комментариев:

Если это имеет значение, вы также можете получить список идентификаторов процессов с наибольшим количеством открытых файлов, используя

lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail

решение4

Народ, на Mavericks 10.9.4

ulimit -n 2048работает отлично. Возможно, вам придется запустить новый сеанс входа.

Связанный контент