设 worker_processes auto 是最稳妥起点,需配合 cpu 绑定(worker_cpu_affinity auto)和资源上限调优(worker_rlimit_nofile、worker_connections),才能真正跑满跑稳多核 cpu。

直接设为 auto 是最稳妥的起点,再配合 CPU 绑定和资源上限调整,才能真正把多核 CPU 跑满、跑稳。
为什么 worker_processes 关键在“匹配逻辑核数”
每个 worker 进程是独立运行的,不共享内存,也不跨进程调度请求。如果只设 1 个进程,哪怕服务器有 16 核,也只用上 1 核;设成 32 个,系统频繁切换上下文,反而拖慢响应。
- 推荐值 = 当前机器的逻辑 CPU 核心数(含超线程)
- 查法:执行
nproc或lscpu | grep "CPU(s):" - 4 核 8 线程 → 设为 8;2 核虚拟机 → 设为 2
-
worker_processes auto;会自动读取并匹配,比手动写数字更安全,尤其在容器环境里不会误读宿主机核数
必须搭配 worker_cpu_affinity 避免缓存失效
光开多个进程还不够。默认情况下,Linux 调度器可能把不同 worker 轮流扔到任意核心上,导致 L1/L2 缓存反复失效,指令流水线中断。
- 启用绑定后,每个 worker 固定在一个核心运行,缓存命中率明显提升
- 推荐写法:
worker_cpu_affinity auto;(Nginx 1.9.10+ 支持,自动按最优策略分配) - 如需手动配置:2 核写
01 10,4 核写0001 0010 0100 1000,每位对应一个逻辑核,1 表示启用
别忘了配套调高系统级连接上限
worker_processes 和 worker_connections 共同决定理论并发能力,但这个数字会被系统卡死。
- 每个 worker 默认最多打开 1024 个文件描述符(即连接),远不够用
- 在 nginx.conf main 块加:
worker_rlimit_nofile 65535; - 同步执行系统级设置:
ulimit -n 65535(临时)或写入/etc/security/limits.conf(永久) - events 块中配
worker_connections 10240;,确保单 worker 能撑住高并发
验证是否生效的简单方法
改完配置不要急着压测,先确认基础项已落地:
- 执行
nginx -t检查语法,再nginx -s reload生效 - 运行
ps axo pid,comm,psr | grep nginx,看 worker 进程是否分布在不同 CPU 编号上 - 用
top按1查看各核心使用率,高负载下应接近均衡 - 观察
netstat -an | grep :80 | wc -l或ss -s,确认连接数能突破默认限制











