Мне нужно избавиться от надоедливого ограничения "Слишком много открытых файлов в системе" в OS X 10.7.1.
Есть ли способ?
Мне нужно избавиться от надоедливого ограничения "Слишком много открытых файлов в системе" в OS X 10.7.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
например, limit maxfiles
и он будет переопределять все, что вы здесь указали .
Опять же из статьи:
После того, как вы это сделаете, само ядро будет иметь максимальное количество файлов, но оболочка может этого не делать. А так как большинство процессов, которые будут обрабатывать такое количество файлов, будут инициироваться оболочкой, вы захотите увеличить их.
Команда для этого:
ulimit -S -n 2048 # or whatever number you choose
Это изменение также временно; это длится только для текущего сеанса оболочки. Вы можете добавить его в свой файл конфигурации оболочки (.bashrc
, .zshrc
или любой другой), если хотите, чтобы он запускался каждый раз, когда вы открываете оболочку.
Кажется, что есть совершенно другой метод для изменения лимита открытых файлов для каждой версии 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
Вам нужно будет увеличить настройки ulimit - в наши дни это довольно мало для OS X - по умолчанию 256. Добавьте ulimit -n 4096
или аналогичный вашему ~/.profile или эквивалентному, и это решит эту проблему в вашей локальной среде. Запустите ulimit -a
чтобы проверить ваш текущий уровень
Чтобы увидеть системные настройки, запустите это:
launchctl limit maxfiles
В Lion (10240) он установлен немного выше для каждого процесса, чем раньше. Но если вы все еще нажимаете на него, вы можете установить его выше, используя ту же команду с желаемыми уровнями. Чтобы сделать изменения постоянными /etc/launchd.conf, вам нужно добавить соответствующие строки.
Другой вариант может найти виновника:
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
Народ, на Маверикс 10.9.4
ulimit -n 2048
работает нормально. Возможно, вам потребуется запустить новый сеанс входа в систему.
После всех изменений выше моего java не сделал больше чем 10000 файлов. Решением был этот флаг jvm -XX:-MaxFDLimit
Вы можете запустить
lsof -n
какой процесс открыть слишком много файлов.
тогда убей это.
или же
sysctl -w kern.maxfiles=20480
измените его на больший.
Для последних версий macOS (на момент написания: 10.14.1) вы можете использовать sudo launchctl limit maxfiles 64000 524288
(по умолчанию это 256), но это работает только в текущем сеансе. Используйте задание launchctl
от @ninjaPixel (https://superuser.com/a/1171028/760235) для постоянного решения.
Я столкнулся с этим во время выполнения команды chmod -R, поэтому я справился с этим, сделав небольшие шаги, например
# for each directory
find . -type d -exec chmod 755 {} \;