
Мне нужно избавиться от надоедливого ограничения «Слишком много открытых файлов в системе» в 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.conf
like 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
работает отлично. Возможно, вам придется запустить новый сеанс входа.