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


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

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


150
2018-06-07 08:52


происхождения


Вы хотите больше объяснить, когда это произойдет? В каких обстоятельствах? - slhck
@slhck - У меня такая же проблема. Обстоятельства в основном «наугад». Я разработчик, поэтому я довольно активно использую свой Mac: одновременно запускаю одну или несколько баз данных, веб-сервер, инструменты тестирования, один или несколько браузеров и музыкальный проигрыватель. Google Chrome, похоже, является одной программой, в которой открыто много файлов. - Nathan Long
На самом деле мое «тяжелое использование» не было проблемой; мои настройки для максимального количества открытых файлов для ядра и каждого процесса были намного ниже, чем должны быть по умолчанию. - Nathan Long
Если вы прочитали комментарий Натана и задались вопросом, почему он не включил никаких подробностей о дефолтах, это объясняется тем, что он изложил все это в своем ответе ниже. (Хороший ответ! :) - Olie
Я в том же использовании, что и Натан Лонг, и нашел, что перезапуск Apache был единственным шагом, который «решил» проблему. Я применил все ограничения ниже, но они не сразу помогли. Я запускаю командную строку phpUnit tests> selenium server> firefox> apache> php> mysql all на одном и том же macbook. Используется для работы до тех пор, пока я не обновится до mavericks. Ошибка, которую я получаю, находится в тестируемой webapp, то есть в php / apache заканчиваются файлы, поэтому, по-видимому, не контролируется настройкой оболочки. - scipilot


ответы:


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

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

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

  • 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.conf как limit maxfiles и он будет отменять все, что вы здесь ставите.

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

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

Команда для этого:

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

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


198
2018-06-29 20:23



какой предел применяется к процессам, запускаемым щелчками значков в области запуска? И как изменить этот предел? Когда вы говорите «оболочка», я предполагаю, что вы имеете в виду интерактивную оболочку терминала. - Cheeso
@Cheeso - I думать что общий системный предел (sysctl) или лимит запуска, в зависимости от того, что меньше, контролирует это. - Nathan Long
создание /etc/launchd.conf с ограничением содержимого maxfiles 1000000 1000000 отлично работает для меня! (Здесь OSX 10.8.2) - Zugwalt
я кладу kern.maxfiles=65000 kern.maxfilesperproc=65000 в /etc/sysctl.conf и перезагрузиться. kern.maxfiles был проигнорирован и остался по умолчанию, но kern.maxfilesperproc был установлен в 65000. У меня нет /etc/launchd.conf, так что с этим связано? - pferrel
Если у кого-то проблемы с максимальными файлами, которые не прилипают, это связано с тем, что после строки maxfiles существует конечное пространство, которое необходимо удалить. - jjathman


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

51
2018-01-24 14:56



отлично работает, спасибо! В моем случае ошибка, проявленная в java-процессе с сообщением IO Error: Bad file descriptor (Write failed) - agradl
Также работает на El Capitan 10.11.6 - Troy Daniels
все еще не может изменить ulimit для оболочки. Максимальный размер 1024, что бы я ни делал - DataGreed
На шаге 2 выполните: sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist - Hai Nguyen


Вам нужно будет увеличить свои настройки ulimit - на данный момент это довольно низко на OS X - 256 по умолчанию. Добавить ulimit -n 4096 или аналогично вашему ~ / .profile или эквивалентному, и это решит его в вашей локальной среде. Бег ulimit -a проверить текущие уровни

Чтобы увидеть системные настройки, запустите это:

launchctl limit maxfiles

В Lion (10240) он установлен немного выше по сравнению с предыдущим процессом, чем раньше. Но если вы все еще нажимаете на него, вы можете установить его выше, используя ту же команду с желаемыми уровнями. Чтобы изменения были постоянными /etc/launchd.conf, вам нужно добавить соответствующие строки.


29
2018-06-07 11:09



256? Для меня это дескрипторы файлов 2560, и я никогда не менял их. Предел - 266 процессов (см. ulimit -a). - slhck
Для меня же 256 файлов на MacOS X Maverick - Climbatize
256 на OS X Yosemite также - Alexander
256 на Эль-Капитане. - TMN
256 в Йосемити. - Jaec


Другой вариант может найти виновника:

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

Для последнего вы могли видеть, какие файлы открыты:

sudo lsof -n | grep socketfil

И, если хотите, убейте процесс

kill $pid

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

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

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

17
2018-02-18 00:42



Полезно! Но сортировка по OS X (10.11) не принимает -h. (Может быть -g?) - Robert Calhoun
Для меня хорошо работали без -h (OS X 10.12.3): sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail - vearutop
Так что будь -h - sanmai
Это единственный ответ, который помог мне объяснить причину моей проблемы .. спасибо :) - SgtPooki
Для чего это стоит, вы также можете получить список идентификаторов процессов с наиболее открытыми файлами, используя lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail, - Chris Frederick


Люди, на Mavericks 10.9.4

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


9
2017-09-04 16:19





Я столкнулся с этим, выполняя chmod -R, поэтому я получил его, выполнив меньшие шаги, например.

# for each directory
find . -type d -exec chmod 755 {} \;

0
2017-12-14 18:50



Хотя это может быть обход, он, похоже, не отвечает на вопрос. Возможно, объясняя, что вы не можете избавиться от сообщения, а затем предложите это, чтобы один из способов уменьшить его проблему, улучшил бы ваш ответ. - music2myear


Вы можете запустить

lsof -n

который обрабатывает слишком много файлов.

затем убейте его.

или

sysctl -w kern.maxfiles=20480

измените его на более крупный.


0
2018-05-18 02:52



Пожалуйста, объясните, как этот ответ отличается от тех, которые уже были даны. - Stephen Rauch