Исчерпание ресурсов веб-сервера NGINX
17 Nov 2016 | Автор: dd |Стал тут у меня один из свежеустановленных веб-серверов под NGINX вываливаться в 500 ошибку. В логах обнаружилась следующая запись: socket () failed (24: Too many open files) while connecting to upstream …
Это означает что мы уперлись в лимиты открытых файлов для нашего веб-сервера. Оценить количество открытых файлов для процесса можно с помощью выражения:
# 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
как видим при лимите в 1024 файлов, открыто почти в притык. Лимиты системы мы можем просмотреть в выводе команды:
# ulimit -a
или же собственно лимиты открытых файлов
# ulimit -n
Чтобы увеличить лимит открытых файлов в системе, выполняем команду
# ulimit -n 16384
и ребутим машину.
После чего идем править конфиг nginx: /etc/nginx/nginx.conf и в самом начале файла, в разделе # Server globals добавляем значение worker_rlimit_nofile 16384 и меняем в # Worker config значение worker_connections на число полученное делением worker_rlimit_nofile на worker_processes
#### /etc/nginx/nginx.conf
# Server globals
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 16384;
# Worker config
events {
worker_connections 8129;
use epoll;
}
#########
где worker_connections – максимальное число соединений, доступное для открытия процессом
worker_rlimit_nofile – максимальное чилсо открытых файлов для рабочих процессов
worker_processes – соответствует числу ядер процессора, которые можно посмотреть командой
# lscpu | grep '^CPU(s)'
после этих манипуляций рестартим NGINX
# service nginx restart
Исчерпание ресурсов веб-сервера NGINX,Теги: nginx, настройка системы, сайты