Debian Nginx и количество открытых файлов

Доброго времени суток, читатель. Появилось свободное время, которое совпало с желанием написать небольшую заметку.
Итак, имеем nginx, проксирующий много траффика на бэкэнды. В какое то время трафика стало много настолько, что в error.log nginx’a стали сыпаться сообщения вида:

accept4() failed: Too many open files

Собственно вроде бы все просто, нужно увеличить лимиты открываемых файлов для nginx, но получилось не так быстро. Подробности ниже

Сначала пробовал как и все увеличить лимиты в

/etc/security/limits.conf

Добавил в конец файла строку

*  hard    nofile   8192

Перезагрузился и.. И ничего не произошло. Не произошло потому, что на пользователя root и процессы запущенные от него такая конструкция не повлияет и надо записывать в таком формате:

root  hard  nofile 8192

либо

root  -  nofile 8192

Если мы запишем с символом ‘*’ то лимиты применятся только на пользователей отличных от root.

Но в то время этого я не знал и поэтому продолжил в данном ключе изучение проблемы. Потом было решено подправить лимиты и в systemd, если юниты запускаются не через sysinit, то в принципе логично. Открываем

/etc/systemd/system.conf

и раскоменчивая строку, добавляем

DefaultLimitNOFILE=8192

эту же строчку пропишем и в

/etc/systemd/user.conf

Перезагружаемся

ulimit -Hn
8192

Да, это сработало

А теперь nginx. Так как сначала, все это затевалось вообще ради nginx и ошибки

accept4() failed: Too many open files

напишу как увеличить лимиты исключительно для nginx. В конфиге nginx

/etc/nginx/nginx.conf

добавляем строчку

worker_rlimit_nofile 16384;

и перезапускаем nginx. Все!

Оцените статью