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

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

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

147 голосов | спросил John Wilund 7 J0000006Europe/Moscow 2012, 12:52:49

7 ответов


198

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

  

По умолчанию установлено максимальное количество файлов, которые 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, и он переопределит все, что вы положили здесь.

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

  

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

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

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

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

ответил Nathan Long 30 J0000006Europe/Moscow 2012, 00:23:19
51

Похоже, существует совершенно другой способ изменения предела открытых файлов для каждой версии 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 24 Jpm1000000pmTue, 24 Jan 2017 17:56:37 +030017 2017, 17:56:37
29

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

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

launchctl limit maxfiles

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

ответил Adam C 7 J0000006Europe/Moscow 2012, 15:09:52
15

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

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
ответил sanmai 18 FebruaryEurope/MoscowbSat, 18 Feb 2017 03:42:52 +0300000000amSat, 18 Feb 2017 03:42:52 +030017 2017, 03:42:52
9

Люди, на Mavericks 10.9.4

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

ответил Clustermagnet 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 04 Sep 2014 20:19:11 +0400 2014, 20:19:11
0

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

# for each directory
find . -type d -exec chmod 755 {} \;
ответил Michael 14 WedEurope/Moscow2016-12-14T21:50:26+03:00Europe/Moscow12bEurope/MoscowWed, 14 Dec 2016 21:50:26 +0300 2016, 21:50:26
0

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

lsof -n

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

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

или

sysctl -w kern.maxfiles=20480

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

ответил SaintKnight 18 Mayam17 2017, 05:52:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132