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

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


nginx_error._too_many_open_files

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
nginx_error._too_many_open_files [2016/11/05 22:33] – создано daniilnginx_error._too_many_open_files [Дата неизвестна] (текущий) – внешнее изменение (Дата неизвестна) 127.0.0.1
Строка 1: Строка 1:
 ====== Nginx Error. Too many open files ====== ====== Nginx Error. Too many open files ======
  
 +===== Описание =====
 +В логе ошибок Nginx:
 <code> <code>
 ...socket() failed (24: Too many open files) while connecting to upstream..." ...socket() failed (24: Too many open files) while connecting to upstream..."
 </code> </code>
 +
 +Для одного соединения Nginx инициирует открытие как минимум двух потоков ввода-вывода. Каждому потоку присваивается файловый дескриптор. В операционной системе имеется ограничение на количество одновременно открытых потоков ввода-вывода для одного процесса. Упомянутая ошибка сообщает о том, что процессы Nginx достигли это ограничение.
 +
 +----
 +
 +===== Диагностика =====
 +
 +Список файловых дестрипторов, созданных процессом, можно увидеть в каталоге
 +<code>
 +/proc/$pid/fd
 +</code>
 +где
 +
 +  * **%%$pid%%** - ID процесса
 +
 +Красивый вывод статистики по процессам Nginx:
 +
 +<code bash>
 +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
 +</code>
 +
 +<code>
 +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
 +</code>
 +
 +----
 +
 +===== Решение =====
 +
 +Если превышение лимита на количество открытых дескрипторов вызвано естественными факторами и его необходимо увеличить (а не искать причину), то есть два способа:
 +
 +  * ограничение на количество открытых файловых дискрипторов для воркеров Nginx можно задавать через параметр **worker_rlimit_nofile** :
 +
 +<code bash>
 +vim /etc/nginx/nginx.conf
 +</code>
 +
 +<code nginx>
 +worker_rlimit_nofile 131072;
 +
 +events {
 +...
 +}
 +
 +http {
 +...
 +}
 +</code>
 +
 +<code bash>
 +nginx -t
 +service nginx restart
 +</code>
 +
 +  * изменение ограничения со стороны операционной системы:
 +
 +<code bash>
 +vim /etc/security/limits.conf
 +</code>
 +
 +добавляем
 +
 +<code>
 +* soft nofile 131072
 +* hard nofile 131072
 +</code>
 +
 +и выполняем
 +
 +<code bash>
 +ulimit -n 131072
 +</code>
 +
 +----
 +
 +===== Источники =====
 +
 +  * [[ http://nginx.org/ru/docs/ngx_core_module.html#worker_rlimit_nofile | nginx.org ]]
 +  * [[ https://arm1.ru/blog/oshibka-nginx-too-many-open-files ]]
 +  * [[ https://ru.wikipedia.org/wiki/Файловый_дескриптор | Wikipedia. Файловый дескриптор ]]
nginx_error._too_many_open_files.1478374380.txt.gz · Последнее изменение: 2016/11/05 00:00 (внешнее изменение)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki