Увеличить Max Open File Limit в Unix/Linux
Несколько раз я сталкивался с ошибкой «Too many open files»(Слишком много открытых файлов) на сервере с высокой нагрузкой. Это означает, что сервер исчерпывает ресурс на максимальный предел открытых файлов (max open file limit). Теперь вопрос в том, как я могу увеличить лимиты открытых файлов на Linux? Да все очень просто, в своей статье «Увеличить Max Open File Limit в Unix/Linux» покажу как это выполняется.
Увеличить Max Open File Limit в Unix/Linux
Приведу команды на различные Unix/Linux ОС
Увеличить Max Open File Limit в Linux
Для начала проверим какой предел установлен в ОС:
# cat /proc/sys/fs/file-max
Увеличиваем данный предел в Linux
Мы можем увеличить лимиты для открытых файлов:
- Временно.
- Постоянно.
-===ВРЕМЕННО===-
Если есть необходимость увеличить лимит временно (для тестирования, например), то можно это сделать так:
# sysctl -w fs.file-max=500000
Или:
# echo "500000" > /proc/sys/fs/file-max
Вот еще один пример:
# ulimit -n 65635
-===ПОСТОЯННО===-
Если есть необходимость увеличить лимит навсегда, то можно это сделать так:
# vim /etc/sysctl.conf [...] fs.file-max = 500000 [...]
Эти настройки будут сохраняться даже после перезагрузки системы. После добавления конфигурации в файл, выполните следующую команду, чтобы изменения вступили в силу:
# sysctl -p
Настройка лимитов для каждого пользователя
# vim /etc/security/limits.conf
Добавляем параметры:
* hard nofile 500000 * soft nofile 500000 root hard nofile 500000 root soft nofile 500000
Проверка установленных лимитов
Используйте следующую команду, чтобы увидеть максимальное чисто для открытых файлов:
# cat /proc/sys/fs/file-max
Подключаемся от пользователя (у меня это nginx):
# su nginx
Проверяем параметры Hard лимитов:
# ulimit -Hn
В консоле, можно ввести данную команду (очень удобно отображает):
# for pid in `pidof nginx`; do echo "$(< /proc/$pid/cmdline)"; egrep 'files|Limit' /proc/$pid/limits; echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done
Проверяем параметры лимитов Soft:
# ulimit -Sn
Увеличить Max Open File Limit в Mac OS X
Выполним проверку лимитов с помощью:
$ launchctl limit maxfiles
Где:
- Первый аргумент — soft limit.
- Второй аргумент — hard limit.
Можно прописать в файл:
# vim ~/.bash_profile
Следующее значение:
ulimit -n 65536 200000
Вот и все!
Увеличюем nginx worker_rlimit_nofile в nginx ( на уровне Nginx)
В nginx также можно увеличить лимиты с директивой worker_rlimit_nofile, которая позволяет увеличить этот лимит, если это не хватает данного ресурса на лету на уровне процесса:
# vim /etc/nginx/nginx.conf
И прописываем (редактируем):
# set open fd limit to 30000 worker_rlimit_nofile 30000;
После чего, проверяем конфигурацию nginx и перезапускаем его:
Save and close the file. Reload nginx web server, enter:
# nginx -t && service nginx -s reload
В комментариях писали что нельзя установить данные лимиты для Kali Linux. Вот, решил показать наглядный пример:
Включение ограничений на основе PAM в Unix/Lixux
Для Debian/Ubuntu
Редактируем файл (Debian/Ubuntu):
# vim /etc/pam.d/common-session
Вставляем:
session required pam_limits.so
Открываем еще один файл:
# vim /etc/security/limits.conf
Прописываем лимиты:
* soft nofile 65536 * hard nofile 200000
Открываем:
# vim /etc/ssh/sshd_config
И, приводим к виду:
UseLogin yes
И выполняем рестарт:
# reboot
Для CentOS/RedHat/Fedora
Редактируем файл (Debian/Ubuntu):
# vim /etc/pam.d/login
Вставляем:
session required pam_limits.so
Открываем еще один файл:
# vim /etc/security/limits.conf
Прописываем лимиты:
* soft nofile 65536 * hard nofile 200000
Открываем:
# vim /etc/ssh/sshd_config
И, приводим к виду:
UseLogin yes
И выполняем рестарт:
# reboot
У меня все! Статья «Увеличить Max Open File Limit в Unix/Linux», завершено.
в kali linux не работает смена хард и софт лимитов. всё равно пишет 4096 и 1024 соответственно.
Можно! Что-то делаете не так. Я выложил скриншот в статье и показал что можно все сделать.
Мужикам на картинке к статье явно не повезло.
Свет приглушён, явно видно зелёный оттенок табличек аварийного освещения — либо дело за полночь, либо у них блекаут и работают от дизеля.
Сидят за консолью. По сети, оно, похоже, уже не отвечает. Плохо дело.
Стул притащили. Значит, давно не отвечает. Надо было прописать MAX OPEN FILE LIMIT заранее, а не когда уже навернулось.