worker_processes需与CPU核心数、系统资源及业务负载协同调优,通过分阶段压测确定最优值:先校验ulimit和内核配置,再按基线、线性扩展、饱和测试三阶段验证,结合QPS、延迟、CPU利用率等指标综合判断。

worker_processes 不是单独调优的参数,它必须和 CPU 核心数、系统资源限制、实际业务负载协同验证。压测目标不是“设得越多越好”,而是找到吞吐稳定、延迟可控、CPU 利用率均衡的最优值。
明确压测前的系统准备
确保底层支撑到位,否则压测结果失真:
- 执行 ulimit -n 检查当前文件描述符上限,必须 ≥ worker_processes × worker_connections(例如 8 核 × 10240 = 81920),否则连接会直接被拒绝
- 在 /etc/security/limits.conf 中设置
* soft nofile 100000和* hard nofile 100000,并重启会话生效 - 确认内核支持 epoll(Linux 2.6+ 默认启用),并在 events 块中显式声明
use epoll; - 关闭 SELinux 或调整策略,避免其拦截高并发连接行为
设计分阶段压测方案
避免一次性跳到最大值,按阶梯递增并观察拐点:
-
第一阶段(基线):设为
worker_processes 1,用 wrk 或 go-wrk 发起 500 并发,记录 QPS、p99 延迟、错误率 -
第二阶段(线性扩展):逐步设为 2、4、8(对应物理核心数),每次保持
worker_connections 10240不变,压测相同并发量 -
第三阶段(饱和测试):固定 worker_processes = CPU 核心数,逐步提升并发从 1k → 5k → 10k,观察 CPU idle 是否持续低于 20%、是否出现大量
TIME_WAIT或accept() failed (24: Too many open files)错误
关键指标判读要点
不能只看 QPS 上升,要结合资源使用与稳定性判断:
- 当 worker_processes 从 4 增至 8,QPS 提升不足 5%,但 sys CPU 使用率上升 30% → 说明上下文切换开销已抵消收益,8 不是更优解
- 启用
worker_cpu_affinity auto;后,各 CPU 核心负载方差缩小(用htop观察),且 p99 延迟下降明显 → 表明亲和性生效,应保留 - 压测中出现大量
nginx: [alert] 1024 worker_connections are not enough→ 不是增加 worker_processes,而是先检查worker_rlimit_nofile是否足够,并确认系统 ulimit 已生效
生产环境推荐配置组合
基于 2026 年主流服务器(16 核 / 32GB 内存 / SSD)实测收敛结论:
-
worker_processes auto;—— 自动匹配物理核心数(非逻辑线程数),避免超线程干扰调度 -
worker_cpu_affinity auto;—— 内核 4.0+ 环境下比手动位掩码更鲁棒,防止绑定错位 -
worker_rlimit_nofile 100000;—— 必须 ≥ 单 worker 连接上限,否则该设置无效 -
events { worker_connections 10240; use epoll; multi_accept on; accept_mutex off; }—— 高并发下批量收包 + 去互斥锁,实测提升吞吐 18%~22%



















