推荐在 nginx.conf 全局块配置 worker_processes auto; 和 worker_cpu_affinity auto;(需 nginx ≥1.9.10),可自动按逻辑核一对一绑定;若环境受限(如容器 cgroup 未暴露真实 cpu 数),则需先用 nproc 确认核数并手动配置掩码,且参数个数必须与 worker 数严格匹配。

直接在 nginx.conf 的全局块(即 events 块外、http 块之上)写两行配置,就能完成可靠且适配性强的 CPU 亲和性设置:
worker_processes auto; worker_cpu_affinity auto;
前提是 Nginx 版本 ≥ 1.9.10 —— 这是当前最稳妥、最推荐的默认配置,不是可选项,而是应作为基础项启用。
确认 Nginx 版本是否支持 auto 模式
执行 nginx -v 查看版本。若低于 1.9.10,需升级或改用手动模式。二进制安装包通常来自官网或第三方源,只要不是极老旧版本(如 1.6.x 或更早),基本都已支持。
手动配置时掩码必须严格匹配 worker 数量
若因环境限制(如容器内 cgroup 未正确暴露 CPU 数)导致 auto 失效,才需手动设置:
- 先查真实可用逻辑核数:
nproc或lscpu | grep "^CPU(s):" - 设
worker_processes 4;(以 4 核为例) - 对应写
worker_cpu_affinity 0001 0010 0100 1000;:每位从右往左对应 CPU 0、1、2、3,每组仅一位为 1 - 注意:
worker_cpu_affinity的参数个数必须等于worker_processes的数值,否则 Nginx 启动会报错或部分进程不绑定
验证绑定是否真正生效
重启 Nginx 后,用以下命令交叉检查:
-
ps -eo pid,psr,comm | grep 'nginx: worker' | sort -k2,2n→ 每个 worker 的 PSR 列应为固定、不重复的数字(如 0、1、2、3) -
taskset -cp $(pgrep -f "nginx: worker" | head -1)→ 输出类似 pid 12345's current affinity list: 2,表示绑定到 core 2 -
cat /proc/$(pgrep -f "nginx: worker" | head -1)/status | grep Cpus_allowed_list→ 应显示单一核心编号,如 Cpus_allowed_list: 2
配套资源必须同步到位
CPU 绑定只是性能底座,缺了下面几项,效果会大打折扣:
-
worker_rlimit_nofile 65535;(写入 nginx.conf 全局块) - 启动前执行
ulimit -n 65535,或在 systemd service 文件中加LimitNOFILE=65535 - 内核参数调优:
net.core.somaxconn = 65535、vm.swappiness = 0 - Kubernetes 环境下,务必确认容器实际分配的 vCPU 数(如
cat /sys/fs/cgroup/cpu.max),避免auto误读宿主机核数











