应设worker_processes为CPU物理核心数,如8核则设为8;启用worker_cpu_affinity绑定各worker到独立核心以减少缓存抖动;必须配置worker_rlimit_nofile并同步调整系统limits,最后通过ps和taskset验证绑定效果。

设置 worker_processes 并合理绑定 CPU 核心,是提升 Nginx 并发性能的关键一步。不恰当的配置可能导致负载不均、缓存失效甚至线程争抢,反而降低吞吐量。
worker_processes 数值怎么设?
通常建议设为 CPU 物理核心数(非超线程数)。可通过 nproc 或 lscpu | grep "CPU(s):" -m1 查看。例如 8 核服务器,直接写:
worker_processes 8;- 若启用了
worker_cpu_affinity,必须显式指定数字,不能用auto - 高 IO 场景(如大量静态文件读取)可尝试设为物理核数 × 1.2~1.5,但需实测验证,避免过度调度开销
worker_cpu_affinity 怎么配才有效?
该指令让每个 worker 进程独占指定 CPU 核心,减少上下文切换和 L2/L3 缓存抖动。格式是按 worker 序号顺序列出二进制掩码(十六进制更常用):
- 8 核机器示例:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; - 等价十六进制写法:
worker_cpu_affinity 01 02 04 08 10 20 40 80; - 若只用前 4 核:
worker_cpu_affinity 01 02 04 08;(此时worker_processes也应为 4) - 注意:掩码位数必须与
worker_processes数量严格一致,否则 Nginx 启动失败
要不要开启 worker_rlimit_nofile?
要,而且必须配。每个 worker 进程默认打开文件数限制(通常是 1024)远低于高并发需求。配合系统级 ulimit 调整:
- 在 nginx.conf 的 main 块中加:
worker_rlimit_nofile 65535; - 同时确保系统允许:修改
/etc/security/limits.conf,加入nginx soft nofile 65535和nginx hard nofile 65535(假设 Nginx 以 nginx 用户运行) - 重启 systemd 或重新登录终端使 limits 生效,再启动 Nginx
验证是否生效?
别只看配置文件,实际跑起来再确认:
- 执行
ps axo pid,comm,psr,cmd | grep nginx | grep -v grep,第三列psr显示当前运行的 CPU ID,应与你配置的 affinity 一一对应 - 用
taskset -cp <pid></pid>查看某 worker 进程绑定情况,输出类似pid 12345's current affinity list: 0表示绑在 CPU 0 - 压力测试时观察
mpstat -P ALL 1,各核利用率应相对均衡,无明显单核打满其他空闲现象

















