设 worker_processes 匹配物理核心数并启用 worker_cpu_affinity 可显著提升 CPU 缓存命中率:前者确保进程数与物理核一致(如 4 核设为 4 或 auto),后者通过自动或手动绑定使每个 Worker 固定运行于指定物理核,减少跨核调度导致的 L1/L2 缓存失效;配合调小 worker_connections、启用 sendfile 和 tcp_nopush、关闭 accept_mutex 等措施可进一步降低缓存抖动;最终通过 ps、taskset 和 perf stat 验证绑定效果及缓存未命中率下降。

直接设对 worker_processes 和 worker_cpu_affinity 就能显著提升 CPU 缓存命中率——核心是让每个 Worker 进程稳定运行在固定物理核上,减少跨核调度带来的 L1/L2 缓存失效。
worker_processes 要匹配物理核心数
进程数超配或不足都会损害缓存局部性:
- 设为
auto最稳妥,Nginx 自动读取物理核心数(非逻辑线程数),比如 4 物理核就启 4 个 Worker; - 手动配置时,优先按物理核数设(如 8 核服务器写
worker_processes 8;),别盲目用超线程数(如 16 线程不等于 16 物理核); - 容器或云主机中,以宿主机实际分配的 vCPU 数为准,不是看
nproc输出的虚拟核数。
显式启用 worker_cpu_affinity 绑定核心
仅设进程数不够,必须绑定才能锁住缓存热区:
- 推荐用
worker_cpu_affinity auto;(Nginx 1.19.10+ 支持),自动按物理核顺序一对一绑定,可读性强、不易出错; - 手动配置示例(4 核):
worker_cpu_affinity 0001 0010 0100 1000;,每位对应一个 CPU 核,从右往左编号(最低位是 CPU0); - NUMA 架构或多路 CPU 服务器,避免跨 NUMA 节点绑定,可用
lscpu查拓扑,再按节点分组设置掩码。
配合减少缓存抖动的其他关键项
CPU 绑定只是基础,还需控制单 Worker 内存访问跨度:
-
worker_connections建议调小(如从 10240 降至 4096),降低连接结构体在内存中分散程度; - 静态资源服务开启
sendfile on;和tcp_nopush on;,绕过用户态拷贝,减少 D-Cache 污染; - 高并发短连接场景,确认
accept_mutex off;(1.11.3+ 默认关闭),避免多 Worker 争抢 accept 导致 cache line 伪共享。
验证是否生效
配置后不能只看启动成功,要实测绑定效果:
- 用
ps -eo pid,comm,psr | grep nginx查 Worker 进程当前运行的核心编号; - 用
taskset -cp <pid>精确查看某 Worker 绑定的 CPU 列表; - 压测时观察
perf stat -e cache-misses,cache-references,L2 缓存未命中率下降 15%–30% 即为有效。


















