启用 worker_cpu_affinity 可让 Nginx 工作进程绑定到指定 CPU 核心,减少上下文切换和缓存失效,提升高并发下的调度效率与响应稳定性;其通过 set_affinity 系统调用固定进程到特定核心,使热点数据保留在本地缓存中,仅在 worker_processes 大于 1 时生效。

启用 worker_cpu_affinity 可让 Nginx 工作进程绑定到指定 CPU 核心,减少上下文切换和缓存失效,从而提升高并发下的调度效率与响应稳定性。
理解 worker_cpu_affinity 的作用机制
Linux 调度器默认会动态迁移进程到空闲 CPU,但频繁迁移会导致 L1/L2 缓存失效、TLB 刷新开销增大。该指令通过 set_affinity 系统调用将每个 worker 进程固定在特定核心上,使热点数据更可能保留在对应 CPU 的本地缓存中。
它仅在 worker_processes auto 或明确设为大于 1 时生效;单进程模式下无实际效果。
正确配置 worker_cpu_affinity 的格式与示例
语法为按 worker 进程顺序列出十六进制掩码,每位代表一个逻辑 CPU(从 LSB 开始编号)。常见写法:
-
双核服务器(2 个逻辑 CPU):
worker_cpu_affinity 01 10;→ 第 1 个 worker 绑核 0,第 2 个绑核 1 -
四核八线程(8 逻辑 CPU):
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; -
简写形式(推荐):
worker_cpu_affinity auto;(Nginx 1.9.10+)自动按物理核分配,避开超线程干扰 -
限制绑定范围(如只用前 4 核):
worker_cpu_affinity auto 00001111;
配置前需确认的关键前提
避免因误配导致性能下降或启动失败:
- 运行
nproc或lscpu | grep "CPU(s)"查看实际逻辑 CPU 数量,确保掩码位数匹配 - 检查 BIOS 中是否启用超线程(HT),若关闭则逻辑 CPU 数 = 物理核数;开启则通常翻倍
- 确认内核未禁用 CPU affinity(
cat /proc/sys/kernel/sched_smt_power_savings非强制限制即可) - 生产环境建议搭配
worker_rlimit_nofile和worker_priority一并优化
验证是否生效与常见问题
启动后执行以下命令确认绑定状态:
-
ps -eo pid,args,psr | grep nginx | grep -v grep→ 查看各 worker 进程当前运行的 CPU(PSR 列) -
taskset -cp <pid></pid>→ 显示指定进程允许运行的 CPU 列表
典型异常:
- Nginx 启动报错
invalid CPU affinity mask:掩码长度超出系统 CPU 总数或格式错误 - 所有 worker 都跑在同一核:
worker_processes设为 1,或掩码全为同一值(如11 11) - 负载不均仍明显:可能受 upstream、磁盘 I/O 或锁竞争影响,需结合
perf top或nginx -T排查

















