nginx: worker_connections are not enough
Сообщение «worker_connections are not enough» значит, что рабочий процесс nginx исчерпал разрешённое число соединений. Важно помнить, что при работе прокси каждое обращение расходует два соединения: от клиента и к приложению.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Значение worker_connections занижено для нагрузки
Предельное число одновременных обращений равно числу рабочих процессов, умноженному на число соединений. Для прокси это значение надо делить на два.
-
Предел дескрипторов не поднят вместе с соединениями
Каждое соединение — дескриптор. Если
LimitNOFILE=в unit-файле остался прежним, nginx упрётся в него раньше, чем в свою настройку, и выдаст ошибку про открытые файлы. -
Соединения не освобождаются из-за медленного приложения
Если приложение отвечает долго, соединения копятся. Увеличение предела тут лишь отодвигает границу: разбираться надо со временем ответа.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Подтверждает упор в предел соединений или дескрипторов.
sudo tail -30 /var/log/nginx/error.log | grep -iE "worker_connections|too many"Действующие настройки в итоговой конфигурации.
sudo nginx -T 2>/dev/null | grep -E "worker_processes|worker_connections|worker_rlimit"Предел дескрипторов, заданный systemd.
systemctl show nginx -p LimitNOFILEРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Предельное число одновременных обращений равно числу рабочих процессов, умноженному на число соединений. Для прокси это значение надо делить на два.
- Как проверить
-
Посмотрите текущие значения и число соединений.
sudo nginx -T 2>/dev/null | grep -E "worker_processes|worker_connections" ss -tan state established | wc -l
- Как исправить
-
Поднимите
worker_connectionsи перезагрузите настройки. Значения 4096–16384 на процесс обычны для нагруженных серверов.sudo nginx -t && sudo systemctl reload nginx
- Почему происходит
- Каждое соединение — дескриптор. Если
LimitNOFILE=в unit-файле остался прежним, nginx упрётся в него раньше, чем в свою настройку, и выдаст ошибку про открытые файлы.
- Как проверить
-
Сравните оба предела.
systemctl show nginx -p LimitNOFILE sudo nginx -T 2>/dev/null | grep worker_rlimit_nofile
- Как исправить
-
Поднимите
LimitNOFILE=в переопределении unit и, при необходимости,worker_rlimit_nofileв самой конфигурации.sudo systemctl edit nginx # [Service]\nLimitNOFILE=65535
- Почему происходит
- Если приложение отвечает долго, соединения копятся. Увеличение предела тут лишь отодвигает границу: разбираться надо со временем ответа.
- Как проверить
-
Посмотрите состояния соединений и время ответа приложения.
ss -tan | awk "{print \$1}" | sort | uniq -c | sort -rn | head sudo tail -20 /var/log/nginx/access.log
- Как исправить
- Ускоряйте приложение и ограничивайте время ожидания, чтобы зависшие запросы не занимали соединения бесконечно.
Пример вывода
Рабочий процесс исчерпал число соединений. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
2026/09/15 16:41:11 [alert] 1120#1120: 1024 worker_connections are not enough
2026/09/15 16:41:11 [error] 1120#1120: *20481 no live upstreams while connecting to upstream
Связанные ошибки
- Too many open files в журнале службы Служба исчерпала лимит файловых дескрипторов. Как правильно поднять LimitNOFILE и когда дело в утечке.
- nginx 502 Bad Gateway: connect() failed к приложению nginx работает, а приложение недоступно: connect() failed, connection refused, no such file or directory для сокета. Разбор 502.
- status=205/LIMITS в systemd Код 205/LIMITS: systemd не смог применить ограничения ресурсов из Limit*=. Обычно значение недопустимо или превышает жёсткий предел.
- Cannot allocate memory в журнале службы Не удалось выделить память: предел службы, память машины, настройка overcommit, исчерпанные области отображения.
- Disk quota exceeded для службы Место на разделе есть, а запись отклоняется: исчерпана дисковая квота пользователя или группы.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
- Failed with result 'resources' Состояние resources: systemd не смог выделить ресурсы для запуска службы. Чем отличается от кодов 200-й группы и что проверять.
- Gunicorn: WORKER TIMEOUT в журнале службы Рабочие процессы Gunicorn убиваются по таймауту: медленные запросы, блокирующие вызовы, неверный тип обработчика.
Где встречается чаще всего
Источники
- Документация nginx: worker_connections и worker_rlimit_nofile
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено нагрузкой на сервер с worker_connections=16.