worker_processes 应设为系统逻辑cpu核数或使用auto,避免过高导致调度开销、过低造成资源闲置;需配合worker_cpu_affinity绑定核心、ulimit调高文件描述符,并按容器限制或混合部署场景动态调整。

worker_processes 是 Nginx 高负载性能的起点,不是调得越多越好,关键在于匹配 CPU 实际可用能力,并减少调度干扰。
设为 auto 或精准匹配逻辑核心数
推荐直接使用 worker_processes auto; —— Nginx 1.3.8+ 自动读取系统逻辑 CPU 核心数(含超线程),比如 4 核 8 线程就启 8 个 worker。若需手动控制(如容器限制),用 nproc 命令确认真实分配核数,再写具体数值(如 worker_processes 2;)。
避免常见误配陷阱
- 固定设为 1:所有请求串行排队,多核完全闲置,QPS 显著受限
- 盲目设为过高(如 16 核机器配 32):进程切换频繁、锁竞争加剧、内存占用翻倍,实测 QPS 反降 5%~15%
- 在 Kubernetes 等容器环境仍用 auto:可能误读宿主机核数,导致资源争抢或浪费
必须配合 CPU 绑定与系统限制
仅调 worker_processes 不够,需同步做三件事:
-
启用亲和性:加
worker_cpu_affinity auto;(Nginx 1.9.10+),或手动写掩码(如四核:worker_cpu_affinity 0001 0010 0100 1000;),让每个 worker 稳定运行在指定核心,减少缓存失效 -
提升文件描述符上限:确保
ulimit -n≥worker_processes × worker_connections,建议设为 65536 并写入启动环境 -
校准 worker_rlimit_nofile:在 main 块中设为同 ulimit 值(如
worker_rlimit_nofile 65536;),防止 worker 自身打开文件数受限
结合业务场景微调
标准 auto 满足大多数情况,但以下场景可调整:
- 混合部署(如 Nginx + MySQL 共存):预留 1~2 核,设为
worker_processes $(nproc --all)-2; - 大量阻塞型反向代理(后端响应慢):可略增至核数 ×1.2,但优先优化 upstream timeout 和 retry
- 纯静态小文件服务:auto 即可,重点应调高
worker_connections和启用open_file_cache











