worker_cpu_affinity用于将Nginx worker进程绑定到指定CPU核心以提升性能,需满足多核系统、内核支持及权限条件,配置格式为掩码序列或auto,可通过taskset验证绑定效果。

在 Nginx 中,worker_cpu_affinity 用于将每个 worker 进程**固定绑定到特定 CPU 核心**,避免进程在不同核心间频繁切换,提升缓存命中率和性能。它只在多核系统上生效,且需配合 worker_processes auto 或明确指定进程数使用。
确认前提条件
该指令依赖操作系统支持(Linux 内核 2.6+),且必须启用 sched_setaffinity() 系统调用(默认开启)。Nginx 需要以非 root 用户启动时,可能需要 CAP_SYS_NICE 权限(如用 setcap 添加),否则会静默失效。
- 检查 CPU 核心数:
nproc或lscpu | grep "CPU(s):" - 确认 Nginx 编译时未禁用
--with-threads(但该指令本身不依赖线程模式) - 运行
nginx -t验证配置语法,再nginx -s reload生效
理解绑定语法格式
格式为 worker_cpu_affinity mask1 mask2 ...;,每个 mask 是一个十六进制或二进制 CPU 掩码,对应一个 worker 进程。掩码位数从右往左编号(bit 0 = 第 1 个逻辑 CPU)。
- 4 核系统(CPU0~CPU3):
0001→ 绑定 CPU0,0010→ CPU1,0100→ CPU2,1000→ CPU3 - 常用写法:
worker_cpu_affinity 0001 0010 0100 1000;(4 个 worker 各绑 1 核) - 也可用十六进制:
worker_cpu_affinity 1 2 4 8;(等价于上面) - 超线程场景(如 4 核 8 线程):
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
推荐配置方式
优先使用 auto 自动匹配核心数,再手动分配掩码,避免进程数与掩码数量不一致:
-
worker_processes auto;→ Nginx 自动设为 CPU 核心数 -
worker_cpu_affinity auto;→ Nginx 2.0+ 支持自动轮询绑定(最简方案) - 手动指定(更可控):
worker_processes 4;<br>worker_cpu_affinity 1000 0100 0010 0001;
(反向绑定,常用于 NUMA 架构隔离)
验证是否生效
启动后,用 taskset -cp <pid> 查看 worker 进程实际绑定的 CPU:
- 先查主进程和 worker PID:
ps -eo pid,comm,args | grep nginx - 对每个 worker 执行:
taskset -cp 12345(12345 为 worker PID) - 输出类似
pid 12345's current affinity list: 0表示已绑定到 CPU0 - 若显示
0-3或空,说明未生效(检查配置、权限、Nginx 版本)


















