Nginx Linux

Nginx: worker_connections exceed open file resource limit или Too many open files

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Ошибка nginx «Too many open files» (24) и «worker_connections exceed open file resource limit» вызвана низким лимитом nofile. Увеличьте worker_rlimit_nofile, LimitNOFILE в systemd и worker_connections, найдите утечки соединений.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

Сообщение
[alert] worker_connections exceed open file resource limit accept4() failed (24: Too many open files)

Каждое соединение и файл в Linux — дескриптор. У процесса есть лимит открытых дескрипторов (nofile), по умолчанию часто 1024. Nginx в рабочем режиме открывает по два дескриптора на соединение (клиент и бэкенд) плюс файлы и логи. При высоком worker_connections или нагрузке лимит исчерпывается, и в логе появляется Too many open files (24); клиенты получают обрывы или 502.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Низкий лимит nofile системыЛимит ОС или systemd мал.cat /proc/PID/limits показывает 1024.Увеличьте лимиты.
Слишком большое worker_connectionsЗначение больше лимита.Предупреждение при старте.Согласуйте с лимитом.
Утечка соединений в бэкендеБэкенд не закрывает соединения.Число сокетов растёт.Исправьте приложение.
Реальная нагрузкаМного клиентов и файлов.Лимит исчерпывается при пиках.Масштабируйте.

#Пошаговое решение

  1. Проверьте текущий лимитЧерез SSH определите PID рабочего процесса Nginx: pgrep -a nginx, затем посмотрите лимит именно этого процесса командой cat /proc/PID/limits | grep "open files" (PID замените фактическим числом). Сообщение Too many open files относится к лимиту дескрипторов, а worker_connections are not enough — к числу соединений: это не всегда одно и то же.
  2. Посчитайте открытые дескрипторыДля найденного рабочего PID посчитайте записи в /proc/PID/fd (sudo ls /proc/PID/fd | wc -l) и сопоставьте с количеством активных подключений ss -s. Повторите измерение под нагрузкой. Если дескрипторы близки к лимиту, найдите типы соединений, а не повышайте значения без расчёта памяти и нагрузки.
  3. Увеличьте лимит nginxВ основном конфигурационном файле Nginx, вне блоков http/events, параметр worker_rlimit_nofile может поднять предел файловых дескрипторов для рабочих процессов; его значение нельзя выбирать только по примеру 65535. Сначала определите системный предел и действительный LimitNOFILE, сделайте копию nginx.conf, затем подберите размер по ожидаемым соединениям и ресурсам.
  4. Настройте worker_connectionsВ секции events параметр worker_connections ограничивает количество соединений на рабочий процесс; при проксировании одно клиентское соединение может использовать дополнительное соединение к backend. Значение подбирайте с учётом числа worker-процессов, открытых файлов и доступной памяти. После изменения проверьте синтаксис sudo nginx -t.
  5. Настройте systemdЕсли служба запущена systemd, узнайте настройки systemctl show nginx -p LimitNOFILE. Для корректировки используйте sudo systemctl edit nginx и секцию [Service] с LimitNOFILE=... по расчётному значению. Сохраните прежнюю конфигурацию и учитывайте, что применение через systemctl restart nginx прерывает действующие соединения — назначьте окно обслуживания.
  6. Настройте limits.confНе считайте /etc/security/limits.conf надёжным способом для службы systemd: многие демоны получают лимиты от менеджера служб, а не пользовательского сеанса PAM. Изменяйте limits.conf только если подтверждено, что конкретный процесс наследует его настройки; затем проверьте фактический /proc/PID/limits, а не только содержимое файла.
  7. Проверьте конфигурациюПосле резервного копирования и nginx -t примените конфигурацию через reload, если менялся лишь Nginx; изменение ограничений systemd обычно требует daemon-reload и перезапуска конкретной службы в окно обслуживания. Снова определите PID, проверьте его лимиты и отсутствие ошибок в error.log. При ухудшении верните исходный файл и параметры службы.
  8. Найдите причину ростаЕсли число соединений растёт постоянно, посмотрите состояния ss -ant и ошибки backend, ограничения upstream keepalive, количество медленных запросов. Большое количество CLOSE_WAIT может относиться к приложению, но не доказывает утечку именно в Nginx. Поищите причину зависших соединений и сравните показатели до и после исправления.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Проверка лимитов и применения изменений.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Проверка лимитов и применения изменений.
    pgrep -a nginx
    systemctl show nginx -p LimitNOFILE
    ss -s
    sudo nginx -t
    # После изменения лишь nginx.conf: sudo systemctl reload nginx
    # Изменение LimitNOFILE службы требует согласованного перезапуска в окно обслуживания.

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 2Настройки лимитов в nginx.conf.
    Nginx
    Настройки лимитов в nginx.conf.
    worker_processes auto;
    worker_rlimit_nofile 65535;
    events {
        worker_connections 8192;
        multi_accept on;
    }
    Вариант 3Дополнение для systemd (systemctl edit nginx).
    INI
    Дополнение для systemd (systemctl edit nginx).
    [Service]
    LimitNOFILE=65535

Значение worker_connections умножается на число воркеров; общий лимит дескрипторов должен быть не меньше worker_connections × 2. Для сильной нагрузки проверьте также net.core.somaxconn и net.ipv4.ip_local_port_range (sysctl). Если количество CLOSE_WAIT растёт, а не падает, устраните утечку в приложении или настройте proxy_read_timeout и keepalive. Документация — nginx.org: core.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.