суббота, 16 ноября 2013 г.

debian: socket() failed (24: Too many open files)

Настройки дебиана для сервера далеко не оптимальны, в частности лимит на количество открытых файлов. Это затрагивает много серверного софта, например mysql, apache, nginx...

В частности, следвие для nginx -  в логе
socket() failed (24: Too many open files)
Проверяем параметры (в дебиан 5 работает, в 6 как-то не хотело)
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
Исправить «too many open files» в nginx

Лечим.
1. в /etc/security/limits.conf нужно добавить такие строки:

* soft nofile 16384
* hard nofile 16384

2. в текущей консоли от рута сделать
ulimit -n 16384

3. в /etc/sysctl.conf добавляем
fs.file-max = 16384


(проверка состояния через cat /proc/sys/fs/file-nr )

4. в nginx.conf прописать новое значение worker_connections, равное (16384 поделить на worker_processes)
+ проверять логи на наличие строк
[alert] 7528#0: 1024 worker_connections are not enough
вообще, как показывает практика, для более-менее нагруженного сайта worker_connections должен быть не менее 4096.

4.5 у nginx есть опция worker_rlimit_nofile 16384, какую-то часть из перечисленного оно заменяет, но подробнее надо смотреть в исходниках/спрашивать у разработчиков.

Теперь в этой же консоли делаем
service nginx restart
должно заработать.

Линки

Комментариев нет:

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