worker_processes

Тема дорожной карты · Nginx

Директива worker_processes управляет числом рабочих процессов Nginx, порождаемых для обработки клиентских соединений, и является одним из наиболее фундаментальных параметров оптимизации производительности в nginx.conf. Установка worker_processes auto указывает Nginx автоматически согласовывать число рабочих процессов с числом доступных ядер CPU — это рекомендуемое значение по умолчанию для большинства продакшен-развёртываний, гарантирующее, что каждый воркер может работать на выделенном ядре без конкуренции за CPU. Архитектура Nginx разделяет ответственность между мастер-процессом (читающим конфигурацию, управляющим воркерами и обрабатывающим сигналы) и одним или несколькими рабочими процессами (фактически принимающими и обрабатывающими соединения), поэтому worker_processes напрямую определяет степень CPU-параллелизма, доступного веб-серверу. Для CPU-интенсивных рабочих нагрузок — SSL/TLS-терминации, gzip-сжатия на лету или сопоставления с регулярными выражениями в server_name — увеличение worker_processes сверх числа ядер, как правило, контрпродуктивно из-за накладных расходов на переключение контекста. Сочетание worker_processes auto с worker_cpu_affinity auto привязывает каждый воркер Nginx к конкретному ядру CPU через маски CPU affinity, снижая промахи кэша и повышая пропускную способность в высококонкурентных сценариях обратного прокси и балансировки нагрузки.

Как это работает

worker_processes начинается с: worker_processes auto, worker_connections 4096 (или больше), worker_rlimit_nofile 65536, multi_accept on, use epoll, sendfile on, tcp_nopush on, tcp_nodelay on. Keepalive на клиентской стороне (keepalive_timeout 65) и к upstream (upstream { keepalive 32; }). Тюньте буферы (client_body_buffer_size, client_max_body_size, proxy_buffer_size). Профайл через nginx_amplify или Lua-tracing.

Когда применять

Тюньте после замеров — не копируйте случайные sysctl + nginx.conf-заклинания из интернета. Дефолты разумны для умеренного трафика. Поднимайте при конкретных боттлнеках (исчерпаны worker connections, file descriptors, upstream-таймауты). nginx -V — для compile-flags; nginx -T — для дампа эффективного полного конфига.

Типичные ошибки

Ловушки worker_processes: worker_connections 100000 без поднятия OS-лимита файловых дескрипторов (ulimit -n) — nginx упирается в OS-лимит; тюнинг tcp_nopush для streaming-ответов (задерживает их); buffer-настройки cargo-cult из CDN-конфига nginx без понимания (трата RAM). Меряйте, меняйте по одной ручке.

Связанные понятия

Полезные ресурсы