SystemdDoctor
служба не работает nginx нагрузка ресурсы

nginx: worker_connections are not enough

Сообщение «worker_connections are not enough» значит, что рабочий процесс nginx исчерпал разрешённое число соединений. Важно помнить, что при работе прокси каждое обращение расходует два соединения: от клиента и к приложению.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Значение worker_connections занижено для нагрузки

    Предельное число одновременных обращений равно числу рабочих процессов, умноженному на число соединений. Для прокси это значение надо делить на два.

  2. Предел дескрипторов не поднят вместе с соединениями

    Каждое соединение — дескриптор. Если LimitNOFILE= в unit-файле остался прежним, nginx упрётся в него раньше, чем в свою настройку, и выдаст ошибку про открытые файлы.

  3. Соединения не освобождаются из-за медленного приложения

    Если приложение отвечает долго, соединения копятся. Увеличение предела тут лишь отодвигает границу: разбираться надо со временем ответа.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Подтверждает упор в предел соединений или дескрипторов.

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

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Значение worker_connections занижено для нагрузки
Почему происходит
Предельное число одновременных обращений равно числу рабочих процессов, умноженному на число соединений. Для прокси это значение надо делить на два.
Как проверить
Посмотрите текущие значения и число соединений.
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
2. Предел дескрипторов не поднят вместе с соединениями
Почему происходит
Каждое соединение — дескриптор. Если 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
3. Соединения не освобождаются из-за медленного приложения
Почему происходит
Если приложение отвечает долго, соединения копятся. Увеличение предела тут лишь отодвигает границу: разбираться надо со временем ответа.
Как проверить
Посмотрите состояния соединений и время ответа приложения.
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 документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено нагрузкой на сервер с worker_connections=16.
    собственная проверка, systemd 255
    сверено 15 сентября 2026