Исправить «too many open files» в nginx

У вас настолько выросла посещаемость сайта, что nginx отписывает ошибки «too many open files» с ужасающей скоростью?

Причина в лимитах. По умолчанию на процесс выдается возможность открыть 1024 файла (по крайней мере в Debian и Ubuntu). Как узнать действующие лимиты? Просто. Выполняем от суперпользователя:

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

Получаем отчётик:

nginx: worker process
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1048576              files
Currently open files: 945

nginx: master process /usr/sbin/nginx
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1048576              files
Currently open files: 24

Ситуация ясна, процесс nginx на грани фола: ещё чуть-чуть и злополучная ошибка «разорвёт» все логи…

Решение проблемы пришлось искать недолго. Во многих блогах и обсуждениях в форумах и списках рассылки предлагается способ с применением утилиты ulimit и редактированием /etc/sysctl.conf и /etc/security/limits.conf.

Пробуем. Не работает. Ищем тщательнее…

Правильный ответ для запускаемого от суперпользователя головного процесса nginx таков: надо отредактировать nginx.conf, добавив в начало директиву (число выбирайте по вкусу):

worker_rlimit_nofile 16384;

После этого пошлите «master process»-у сигнал HUP (пере-конфигурация) и, вуаля:

nginx: worker process
Limit                     Soft Limit           Hard Limit           Units
Max open files            16384                16384                files
Currently open files: 1058

nginx: master process /usr/sbin/nginx
Limit                     Soft Limit           Hard Limit           Units
Max open files            1024                 1048576              files
Currently open files: 24

Ну, а теперь поздравляю, высокая посещаемость при пустых логах ошибок — что может быть более приятно админу?

комментария 3 »21.07.2010 03:02:42 | Делаю |

Комментарии

  1. […] было увеличить лимиты для nginx. В сети нашлось неплохое решение. Используя его, а так же гугл, было пройден следующий […]

  2. gochankot:

    с nginx всегда так — правильные решения в рассылке или после чтения sysoev.ru/nginx/docs

    • Тут как раз ситуация странная. Именно для nginx на первых позициях в поисковиках — неправильные решения, которые не работают.

Оставить комментарий