worker_processes设为auto最稳妥,它自动匹配逻辑cpu核心数并让每个worker独占一核;必须配合worker_cpu_affinity auto、worker_rlimit_nofile调优及ulimit -n生效,否则无法真正提升多核利用率。

直接设为 auto 是最稳妥高效的做法,它会自动匹配逻辑 CPU 核心数,让每个 worker 进程独占一个核心,避免资源闲置或调度开销。
为什么 worker_processes 影响多核利用率
Nginx 是主-工作进程模型,master 进程不处理请求,真正干活的是 worker 进程。每个 worker 独立运行、互不干扰,能并行响应请求。如果只设为 1,哪怕你有 16 核 CPU,也只有一个核在跑,其余全空转;设得太多(比如 32 个进程跑在 8 核机器上),系统就要频繁切换上下文,反而拖慢整体响应。
- 设太少 → 单核过载,连接排队,延迟飙升
- 设太多 → 进程争抢 CPU 和锁,内存占用翻倍,QPS 可能下降 5%~15%
- 设匹配 → 每个 worker 绑定一个逻辑核,缓存局部性好,指令执行更连续
怎么确认并设置合适的值
不用手动查核数再硬编码,推荐用 worker_processes auto;。它会在启动时读取 nproc 输出,准确识别当前环境的逻辑核心数——这对容器、云主机特别友好,不会误读宿主机配置。
- 查当前逻辑核数:终端执行
nproc或lscpu | grep "CPU(s):" - 配置位置:必须写在
nginx.conf最外层(main 块),不能放在 http 或 server 块里 - 示例:4 核 8 线程的机器,
auto会设为 8;2 核虚拟机则设为 2
必须配合 CPU 绑定才真正发挥效果
光设对进程数还不够。启用 worker_cpu_affinity 能把每个 worker 固定到指定 CPU 核,减少跨核迁移带来的 L1/L2 缓存失效。Nginx 1.9.10+ 支持 auto 模式,一行搞定:
-
worker_cpu_affinity auto;—— 推荐首选,自动一对一绑定,无需算二进制掩码 - 手动方式(不推荐):如 4 核需写
worker_cpu_affinity 0001 0010 0100 1000;,易出错且难维护
别忘了同步调高连接和文件描述符限制
worker_processes 的效果依赖配套参数。否则即使开了 8 个进程,每个却只能处理 512 个连接,还卡在系统默认的 1024 文件描述符上限上,等于白配。
- 在 events 块中设
worker_connections 10240;(建议 ≥10240) - 加
worker_rlimit_nofile 65535;让单个 worker 显式继承上限 - 系统级也要调:
/etc/security/limits.conf加* soft nofile 65535和* hard nofile 65535 - 改完执行
nginx -t验证语法,再nginx -s reload生效











