必须确保worker_processes与worker_cpu_affinity数量严格一致:设worker_processes 4则需4个掩码如0001 0010 0100 1000;若用auto则两者须同时为auto,掩码位数须匹配逻辑cpu总数,且需通过taskset或ps验证运行态绑定效果。

直接在 nginx.conf 的 main 块中配置 worker_processes 和 worker_cpu_affinity 即可实现绑定。关键在于两者数量一致、掩码位数匹配、且不能与 auto 混用(除非都用 auto)。
worker_processes 必须设为具体数字或统一用 auto
该指令决定启动多少个 worker 进程,而 worker_cpu_affinity 的掩码个数必须与之严格对应:
- 若写
worker_processes 4;,则worker_cpu_affinity后必须跟 4 个掩码,如0001 0010 0100 1000 - 若写
worker_processes auto;,推荐搭配worker_cpu_affinity auto;(Nginx ≥ 1.9.10),由系统自动轮询分配 -
worker_cpu_affinity在worker_processes为auto但自身未设auto时会失效
CPU 掩码怎么写才正确
每个掩码是二进制或十六进制数,从右往左编号,bit 0 对应 CPU 0:
- 4 核系统(CPU 0–3):
0001→ 绑 CPU 0,0010→ CPU 1,0100→ CPU 2,1000→ CPU 3 - 等价的十六进制写法:
1 2 4 8 - 超线程 4 核 8 线程(CPU 0–7):需 8 个掩码,如
00000001 00000010 ... 10000000 - NUMA 双路服务器:需按物理节点分段写掩码,避免跨节点调度(例如 node 0 的 CPU 0–15 用前 16 个掩码)
验证绑定是否生效
重启 Nginx 后,不能只看配置,要查运行态:
- 查 worker 进程 PID:
ps -eo pid,comm,args | grep 'nginx: worker' - 对每个 PID 执行:
taskset -cp <pid></pid>,输出应显示类似pid's current affinity list: 0 - 或用
ps -eo pid,psr,comm | grep nginx,观察 PSR 列是否稳定不变(跳变说明未绑牢)
什么情况下可以不配
硬绑定不是万能药,以下场景收益有限甚至有害:
- 容器环境(如 Kubernetes)已通过 cgroups 限制 CPU 配额,系统调度器足够高效
- 实际瓶颈不在 CPU(比如磁盘 I/O 慢、上游服务响应长)
- 低流量小站,worker 进程长期空闲,绑定反而降低弹性
- 混合部署且需与其他服务共享核心,强行独占可能引发资源争抢











