Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
NGINX_WORKER_LIMIT Linux / DevOps

Тюнинг Nginx под High-Load: worker_processes, worker_connections и epoll

Обновлено: 21.08.2026
  • Ошибка worker_connections are not enough while connecting to upstream в error.log.
  • Ошибка 24: Too many open files при всплеске трафика.
  • Высокое потребление CPU и длительное время ожидания установки TLS handshake.

1. Настройка глобальной секции /etc/nginx/nginx.conf

# Автоматическое определение по числу физических ядер CPU
worker_processes auto;

# Привязка воркеров к ядрам процессора для минимизации CPU cache misses
worker_cpu_affinity auto;

# Максимальный лимит открытых файловых дескрипторов на процесс воркера
worker_rlimit_nofile 1048576;

events {
    # Максимальное количество одновременных соединений на один worker_process
    worker_connections 65535;
    
    # Использование эффективного мультиплексирования ввода-вывода Linux
    use epoll;
    
    # Принимать сразу все входящие соединения из очереди ядра
    multi_accept on;
}

2. Тюнинг системных лимитов ОС (limits.conf)

В файле /etc/security/limits.d/99-nginx.conf:

nginx soft nofile 1048576
nginx hard nofile 1048576

3. Настройка сетевого стека ядра для Nginx

В файле /etc/sysctl.d/99-nginx-tuning.conf:

# Увеличение длины очереди входящих соединений
net.core.somaxconn = 65535

# Диапазон локальных портов для исходящих upstream-соединений
net.ipv4.ip_local_port_range = 1024 65535

# Повторное использование сокетов TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
sysctl --system && nginx -t && systemctl restart nginx
Практический опыт инженера: Значение worker_rlimit_nofile всегда должно быть не меньше, чем worker_connections * 2, так как на каждое клиентское проксируемое соединение расходуется минимум два файловых дескриптора сокета.

Частые вопросы (FAQ)

Как расс maxClients в Nginx?

Максимальное число одновременных клиентов равно: worker_processes * worker_connections. При использовании Nginx в качестве reverse proxy разделите результат на 2 (соединение с клиентом + соединение с upstream).

Что дает опция reuseport в директиве listen?

Опция listen 80 reuseport создает отдельный сокет прослушивания для каждого worker_process, позволяя ядру распределять входящие TCP-соединения между воркерами без блокировок мьютексов.