Nginx高吞吐靠多Worker进程并行协作与系统级协同;worker_processes auto自动适配CPU核心与NUMA分布;reuseport+独立IP监听消除惊群效应;sendfile、tcp_nopush、tcp_nodelay优化静态服务;Master进程专注配置加载、平滑重启与Worker容错。

Nginx 的高吞吐能力不靠单个进程拼命干活,而是靠多个 Worker 进程各司其职、并行协作,再配合系统级协同,把 CPU、内存、网络资源用得更稳、更满、更少浪费。
Worker 进程数量要匹配物理资源
设太多 Worker 会争抢 CPU 和缓存,太少又压不住并发。关键不是“越多越好”,而是让每个 Worker 跑在独立核心上,避免跨核调度开销:
- 用 worker_processes auto,Nginx 会自动识别 CPU 核心数和 NUMA 节点分布,比手动写死数字更适应现代服务器架构
- 在 32 核 NUMA 机器上,auto 配置比设成 32 提升约 15% 吞吐,因为它会把 Worker 均匀分到不同 Socket,减少远端内存访问延迟
- 若部署在容器中,需确认 cgroup 限制了可用 CPU 数,否则 auto 可能误判——此时应显式设为容器实际可分配的核心数
每个 Worker 独立监听 + reuseport 是并发分发的关键
默认 listen *:80 会让所有 Worker 竞争同一个 socket,产生 accept 锁争用。真正在高并发下起作用的是“按 IP 显式监听 + reuseport”:
- 为每张网卡配置独立 IP(如 192.168.10.10 和 192.168.20.10),然后分别写 listen 192.168.10.10:80 reuseport 和 listen 192.168.20.10:80 reuseport
- Linux 内核(3.9+)在 accept 阶段就完成连接分发,不再需要 Nginx 层做锁同步,彻底消除惊群效应
- 搭配 worker_cpu_affinity auto,让每个 Worker 绑定到对应 CPU 核心,进一步减少上下文切换
静态服务必须启用零拷贝与 TCP 优化
高吞吐静态服务的瓶颈常不在 CPU,而在内核与用户态间的数据搬运。绕过内存拷贝、减少协议栈干预,才能释放真实带宽:
- sendfile on:文件读取+发送由内核直接完成,不经过用户态缓冲区,对大文件尤其明显
- tcp_nopush on:配合 sendfile,确保数据包填满 MTU 再发,减少小包数量
- tcp_nodelay off(注意:不是 on):对于大块静态内容传输,关闭 Nagle 算法反而增加小包,应保持默认或显式设为 off
Master 进程不参与请求处理,但决定系统韧性
Master 不是性能瓶颈,却是稳定基石。它不碰网络、不读文件、不解析请求,只做三件事:
- 加载和校验配置,启动/监控 Worker;
- 收到 nginx -s reload 时,平滑启新 Worker、逐步停旧 Worker,全程无连接中断;
- 某个 Worker 异常退出(如段错误),立即 fork 新进程补位,其他 Worker 和连接不受影响。


















