应将 worker_processes 设为 nproc 命令输出的逻辑核心数或使用 auto,配合 worker_cpu_affinity auto 和 worker_rlimit_nofile 65535,并验证各 worker 分布于不同 cpu 核以实现真正多核并行。

直接把 worker_processes 设为系统逻辑 CPU 核心数,或更稳妥地用 auto,再配合 CPU 绑定和文件描述符调优,就能让多核真正并行干活,而不是只压爆一个核。
确认并匹配真实逻辑核心数
单核满载、多核闲置,根本原因是进程数远小于可用核心。别猜,用命令查准:
- 运行
nproc—— 输出多少,就该设多少(容器、云主机也以它为准) - 避免看
/proc/cpuinfo,它在虚拟化环境常返回宿主机核数,不准 - 推荐写
worker_processes auto;(Nginx 1.3.8+ 支持),自动读取nproc结果,省错
必须绑定 CPU 亲和性
光设对进程数还不够。不绑定时,Linux 调度器可能把多个 worker 都挤到同一颗核上,或频繁迁移,导致缓存失效、延迟抖动。
- Nginx 1.9.10+ 直接加
worker_cpu_affinity auto;,自动错开超线程,优先分配物理核 - 如需手动控制(比如 NUMA 架构),先用
lscpu或numactl --hardware看布局,再按位掩码绑定,例如 4 核:worker_cpu_affinity 0001 0010 0100 1000;
同步放开系统级资源限制
即使进程数和绑定都对了,若系统不允许打开足够文件描述符,worker 一上来就卡在 “too many open files”,照样排队压单核。
- 在
nginx.conf的 main 块加:worker_rlimit_nofile 65535; - 系统级设置:修改
/etc/security/limits.conf,为 nginx 用户加nofile限制(如nginx soft nofile 65536) - 启动前执行
ulimit -n确认生效,否则配置无效
验证是否真正多核并行
改完别急着上线,快速验证:
- 重启 Nginx 后,运行
ps -eo pid,psr,comm | grep nginx,看每个 worker 进程的psr(CPU 编号)是否分散在不同核上 - 用
htop或top -1观察各 CPU 核心使用率是否均衡上升,而非仅 0 号核飙高 - 压测时对比 QPS 和平均延迟,明显改善说明调优到位











