Инструменты пользователя

Инструменты сайта


nginx_error._too_many_open_files

Nginx Error. Too many open files

Описание

В логе ошибок Nginx:

...socket() failed (24: Too many open files) while connecting to upstream..."

Для одного соединения Nginx инициирует открытие как минимум двух потоков ввода-вывода. Каждому потоку присваивается файловый дескриптор. В операционной системе имеется ограничение на количество одновременно открытых потоков ввода-вывода для одного процесса. Упомянутая ошибка сообщает о том, что процессы Nginx достигли это ограничение.


Диагностика

Список файловых дестрипторов, созданных процессом, можно увидеть в каталоге

/proc/$pid/fd

где

  • $pid - ID процесса

Красивый вывод статистики по процессам Nginx:

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            131072               131072               files     
Currently open files: 25

nginx: worker process
Limit                     Soft Limit           Hard Limit           Units     
Max open files            131072               131072               files     
Currently open files: 29

nginx: worker process
Limit                     Soft Limit           Hard Limit           Units     
Max open files            131072               131072               files     
Currently open files: 29

nginx: worker process
Limit                     Soft Limit           Hard Limit           Units     
Max open files            131072               131072               files     
Currently open files: 55

nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 4096                 files     
Currently open files: 23

Решение

Если превышение лимита на количество открытых дескрипторов вызвано естественными факторами и его необходимо увеличить (а не искать причину), то есть два способа:

  • ограничение на количество открытых файловых дискрипторов для воркеров Nginx можно задавать через параметр worker_rlimit_nofile :
vim /etc/nginx/nginx.conf
worker_rlimit_nofile 131072;
 
events {
...
}
 
http {
...
}
nginx -t
service nginx restart
  • изменение ограничения со стороны операционной системы:
vim /etc/security/limits.conf

добавляем

* soft nofile 131072
* hard nofile 131072

и выполняем

ulimit -n 131072

Источники

nginx_error._too_many_open_files.txt · Последнее изменение: 2016/11/06 00:00 (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki