worker_processes auto; 和 worker_cpu_affinity auto; 能自动将每个 worker 进程一对一绑定到逻辑 cpu 核心,减少跨核迁移导致的 l1/l2 缓存失效,提升缓存复用率与 qps;需配合 worker_rlimit_nofile、worker_connections 及系统 ulimit 等协同调优才有效。

直接在 nginx.conf 全局块(即 events 块外、http 块之上)配置 worker_processes auto; 和 worker_cpu_affinity auto;,就能让 Nginx 自动将每个 worker 进程一对一绑定到一个逻辑 CPU 核心上,从而减少跨核调度带来的缓存失效,提升 L1/L2 缓存复用率。
为什么绑定能提升缓存效率
Nginx 的每个 worker 是单线程事件模型。若不绑定,操作系统可能频繁将其在不同核心间迁移,导致:
- L1/L2 缓存中热数据(如共享内存中的缓存索引、SSL 密钥表、slab 分配器元信息)被反复冲刷
- 多个 worker 访问同一块 proxy_cache zone 时,跨核访问延迟升高,锁竞争加剧
- NUMA 架构下,若 worker 被调度到远离其内存节点的 CPU 上,部分请求可能绕过缓存直连后端
推荐配置方式
优先使用自动模式,简洁且适配性强:
-
worker_processes auto;—— 自动读取逻辑 CPU 数(含超线程),设为对应进程数 -
worker_cpu_affinity auto;—— Nginx 1.9.10+ 支持,按顺序将每个 worker 绑定到 CPU0、CPU1…,避免争抢 - 若运行在 Kubernetes 或受限容器中,需确认
cgroup暴露的 vCPU 数准确,否则auto可能误判
必须同步调整的配套参数
CPU 绑定只是底座,没有资源保障,缓存优化效果会打折扣:
-
worker_rlimit_nofile 65535;—— 显式提升单 worker 文件描述符上限 - 系统级执行
ulimit -n 65535,并写入/etc/security/limits.conf - 在
events块中设worker_connections 10240;,与进程数共同决定并发能力 - HTTPS 场景建议调低
vm.swappiness=1,防止 TLS 加解密过程因内存压力触发 swap
验证是否真正生效
写了配置不验证,等于没做:
- 运行
ps -eo pid,psr,comm | grep 'nginx: worker' | sort -k2,2n,输出中每个 worker PID 应固定对应唯一 PSR 值(如 0、1、2、3),不能重复或跳变 - 对某 PID 执行
taskset -cp <pid></pid>,应显示类似pid 12345's current affinity list: 2 - 若多个 worker 显示同一 PSR,常见原因是:Nginx 版本低于 1.9.10、
worker_processes未设为数值(非auto时worker_cpu_affinity才完全支持)、或 cgroup 限制了 CPU 可见性











