Назад | Перейти на главную страницу

Попытка решить "nginx слишком много файлов"

Недавно мы начали получать следующую ошибку в одном из наших ящиков nginx:

2011/05/25 16:35:51 [alert] 3580#0: accept() failed (24: Too many open files)

Проверяя /etc/security/limits.conf, мы получаем следующее:

*                soft    nofile          900000
*                hard    nofile          900000

но когда мы сделали cat / proc / {pid} / limits, он показал, что ограничение файла составляет 1024. Когда мы перезапустили nginx, проблема была исправлена, и / proc / {pid} / limits показал 900000. Я думаю, это могло быть вызвано потому что машина была перезагружена, и при загрузке nginx был запущен до того, как были применены ограничения. Однако все, что я читал о том, как работают лимиты и pam, предполагает, что на самом деле ulimit работает не так. Кто-нибудь знает, что здесь происходит?

Изменить: извините, следует упомянуть ОС и прочее. Мы запускаем CentOS с ядром 2.6.18-194.26.1.el5 и nginx 1.0.1

Этот отчет об ошибке похоже, подтверждает ваше первоначальное подозрение:

Это неправильный ответ на вопрос «как установить ulimit для процесса демона?» /etc/security/limits.d обрабатывается только pam_limits, у которого нет причин находиться в пути для запуска службы.

С другой стороны, при ручном перезапуске nginx наследует ограничения вашей оболочки.

Обходной путь: просто вызовите ulimit в initscript nginx. Вы не можете использовать ulimit -n как обычный пользователь, но сценарий инициализации должен иметь достаточно прав при запуске при запуске.