不能直接用 grep Cpus_allowed 查看 Nginx 进程实时绑核状态,因该字段仅表示 cpuset 约束下的允许 CPU 掩码,非实际绑定结果;真实绑定需查 Cpus_allowed_list 或用 taskset -p/-cp 验证。

不能直接用 grep Cpus_allowed 查看 Nginx 进程的实时绑核状态,因为 Cpus_allowed 是 Linux 进程在 /proc/[pid]/status 中的一个字段,它反映的是该进程**被允许运行的 CPU 列表**(即 cpuset 约束),不是实际绑定(affinity)结果;而 Nginx 的 CPU 绑定靠 worker_cpu_affinity 配置 + sched_setaffinity() 系统调用实现,真实绑定状态需查 /proc/[pid]/status 中的 Cpus_allowed_list 或用 taskset -p。
确认目标 worker 进程 PID
先找出活跃的 worker 进程 ID:
ps -eo pid,comm,args | grep 'nginx: worker'- 或更精准:
pgrep -f 'nginx: worker process'
查看 Cpus_allowed_list 字段(推荐)
该字段显示进程当前**实际被允许使用的 CPU 核心编号范围**(已解码为可读格式,如 0-3 或 0,2,3),比 Cpus_allowed(十六进制掩码)更直观:
pid=12345; grep Cpus_allowed_list /proc/$pid/status- 示例输出:
Cpus_allowed_list: 0-1→ 表示该 worker 只能在 CPU 0 和 CPU 1 上运行
用 taskset 验证运行时亲和性
taskset 读取内核调度器当前设置的 CPU 亲和掩码,是验证绑定是否生效的最可靠方式:
-
taskset -p 12345(12345 为 worker PID) - 输出类似:
pid 12345's current affinity mask: 3→ 十六进制掩码3对应二进制0011,即 CPU 0 和 CPU 1 - 加
-c参数直接显示核心号:taskset -cp 12345→ 输出:pid 12345's current affinity list: 0,1
注意区分几个易混淆字段
/proc/[pid]/status 中相关字段含义不同:
-
Cpus_allowed:十六进制位图(如00000000,00000000,00000000,00000003),需手动换算 -
Cpus_allowed_list:已解析的 CPU 编号列表,优先看这个 -
voluntary_ctxt_switches和nonvoluntary_ctxt_switches:可辅助判断是否因绑核不当导致频繁迁移(非直接指标)


















