Исчерпание ресурсов веб-сервера 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

лимиты NGINX на число открытых файловкак видим при лимите в 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

VN:F [1.9.21_1169]
Rating: 3.6/10 (62 votes cast)
VN:F [1.9.21_1169]
Rating: -4 (from 12 votes)
Исчерпание ресурсов веб-сервера NGINX, 3.6 out of 10 based on 62 ratings

Теги: , ,

Ваш отзыв