Nginx: ошибка (24: Too many open files) и ее решение
Jan 11, 2018 11:43 · 211 words · 1 minute read
На одном из серверов в логе ошибок веб-сервера Nginx появились сообщения вида
2017/11/22 08:21:02 [crit] 29098#29098: *174583882 open() "/var/www/public/blackfriday/img/tabs/img4.png" failed (24: Too many open files), client: 176.113.144.142, server: example.com, request: "GET /blackfriday/img/tabs/img4.png HTTP/2.0", host: "example.com"
Давайте разберемся как исправить данную ошибку в операционной системе Centos 7!
Смотрим текущие soft
/hard
лимиты файловых дескрипторов и открытых файлов для основного (master) процесса Nginx:
cat /proc/$(cat /var/run/nginx.pid)/limits|grep open.files
Max open files 1024 4096 files
и для дочерних (worker) процессов:
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files
Max open files 1024 4096 files
Max open files 1024 4096 files
Max open files 1024 4096 files
Открываем на редактирование конфигурационный файл /etc/security/limits.conf
и вставляем в него следующие строки:
...
nginx soft nofile 10000
nginx hard nofile 30000
В конфигурациооный файл nginx.conf
добавляем следующую строку:
...
worker_rlimit_nofile 30000;
...
Проверим конфигурацию веб-сервера на предмет ошибок и перечитаем конфиг:
nginx -t && nginx -s reload
Проверим новые лимиты, установленные для дочерних процессов веб-сервера Nginx:
ps --ppid $(cat /var/run/nginx.pid) -o %p|sed '1d'|xargs -I{} cat /proc/{}/limits|grep open.files
Max open files 10000 30000 files
Max open files 10000 30000 files
Max open files 10000 30000 files
Новые лимиты могут примениться не ко всем дочерним процессам веб-сервера, в таком случае необходимо перезапустить nginx
с помощью команды:
service nginx restart