Тюнинг производительности

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

Оптимизация производительности Nginx представляет собой системный набор корректировок конфигурации, согласовывающих использование ресурсов веб-сервера с характеристиками оборудования и рабочей нагрузки для достижения максимальной пропускной способности и минимальной задержки. Первый уровень настройки касается использования CPU: установка worker_processes auto согласовывает число рабочих процессов Nginx с доступными ядрами CPU, тогда как worker_cpu_affinity auto привязывает каждый воркер к конкретному ядру для снижения промахов кэша и накладных расходов на переключение контекста. На уровне соединений увеличение worker_connections до 4096 или выше, включение multi_accept on и выбор наиболее эффективной событийной модели через use epoll (Linux) гарантирует, что Nginx может обрабатывать десятки тысяч одновременных соединений на воркер без блокировок. Производительность отдачи статических файлов максимально улучшается включением sendfile on, tcp_nopush on, tcp_nodelay on и настройкой open_file_cache для сокращения обращений к файловой системе, тогда как gzip-сжатие и подходящие значения keepalive_timeout снижают трафик и накладные расходы на соединения в сценариях обратного прокси и балансировки нагрузки. Комплексная оптимизация производительности Nginx также включает настройку параметров ОС — net.core.somaxconn, net.ipv4.tcp_max_syn_backlog и лимита открытых файлов (worker_rlimit_nofile) — для устранения узких мест на уровне ядра, которые в противном случае ограничат пропускную способность Nginx вне зависимости от конфигурации.

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

Тюнинг производительности начинается с: 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_connections 100000 без поднятия OS-лимита файловых дескрипторов (ulimit -n) — nginx упирается в OS-лимит; тюнинг tcp_nopush для streaming-ответов (задерживает их); buffer-настройки cargo-cult из CDN-конфига nginx без понимания (трата RAM). Меряйте, меняйте по одной ручке.

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

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