调优 worker_processes 的核心是让每个 worker 稳定绑定一个物理核心,而非简单增加进程数;需结合 worker_cpu_affinity 绑定、提升 worker_connections 与系统文件描述符限制,并通过 ps、taskset 和 /proc 验证生效。

调优 worker_processes 是提升高核服务器静态转发能力的起点,核心不是“开更多进程”,而是让每个 worker 稳定对应一个物理核心,减少调度干扰和缓存抖动。
匹配物理核心数,而非逻辑核或超线程数
高核服务器(如 32 物理核、64 逻辑 CPU)常因启用超线程而误配过高进程数。Nginx 是 I/O 密集型服务,超线程对性能增益有限,反而易引发 L1/L2 缓存争用和 TLB 刷新。应以物理核心为准:
- 执行
nproc或lscpu | grep "Core(s) per socket"查清物理核心总数 - 若为 32 物理核,推荐设
worker_processes 32;不建议设为 64(即使nproc返回 64) - 使用
worker_processes auto更稳妥——Nginx 1.9.10+ 能识别 NUMA 架构并默认按物理核分配
配合 worker\_cpu\_affinity 实现独占绑定
仅设对进程数不够,必须绑定到固定核心,才能让文件元数据、SSL 会话缓存、共享内存锁等热点数据长期驻留本地缓存:
- 配置示例(32 核):
worker_cpu_affinity auto;—— 自动错开超线程对,优先分配物理核 - 若需精细控制(如 NUMA 节点隔离),可用掩码写法:
worker_cpu_affinity 00000001 00000010 ...(共 32 组) - 避免多个 worker 绑定同一物理核(如两个 worker 共享 core 0),否则抵消绑定收益
同步调高单进程连接能力与系统限制
高核意味着并发潜力大,但若 worker_connections 过低或系统文件描述符受限,实际吞吐仍上不去:
- 将
worker_connections提至 2048 或 4096(静态资源请求轻量,可适当提高) - 检查并提升系统级限制:
ulimit -n应 ≥worker_processes × worker_connections - 在
/etc/security/limits.conf中为 nginx 用户设置:nginx soft nofile 65535nginx hard nofile 65535
验证是否真正生效
配置后务必验证,否则可能形同未调:
- 重启 Nginx 后运行:
ps -eo pid,args,psr | grep 'nginx: worker',确认各 worker 的 PSR 列互不重复且覆盖预期核心范围 - 挑一个 PID 执行:
taskset -cp <pid>,输出应明确显示单一 CPU ID(如 “pid's current affinity list: 12”) - 检查
/proc/<pid>/status | grep CPUs_allowed_list,确认掩码值与配置一致

















