В процессе работы Nginx может возникать ошибка "socket () failed (29: Too many open files) while connecting to upstream"
Необходимо поднять лимиты для операционной системы Linux.
После увеличения ограничения на количество открытых файлов для сервера необходимо также изменить конфигурационный файл службы. Например, укажите/измените следующее значение директивы в конфигурационном файле Nginx /etc/nginx/nginx.conf:
1 | worker_rlimit_nofile 15000 |
Директива worker_rlimit_nofile устанавливает ограничение на количество файлов, открытых рабочим процессом ( RLIMIT_NOFILE ). Файловые дескрипторы нужны Nginx для возврата статического файла из кэша при каждом клиентском подключении. Чем больше пользователей подключается к вашему серверу и чем больше статических файлов возвращает Nginx, тем больше файловых дескрипторов используется. Максимальное количество дескрипторов ограничено на уровне ОС и/или сервиса.
При превышении количества открытых файлов в Nginx возникнет ошибка "socket() failed (24: Too many open files) while connecting to upstream error".
1 | [alert]When configuring Nginx on a high load 8-core server with worker_connections 8192, you need to specify 8192*2*8 (vCPU) = 131072 in worker_rlimit_nofile. |
Затем перезапустите Nginx.
1 | nginx -t && service nginx -s reload |
Чтобы посмотреть количество открытых файлов для пользовательских процессов Nginx, выполните следующие действия:
1 2 3 | su nginx ulimit -Hn 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 |