Nginx 高并发调度依赖 master-worker 模型、事件驱动与系统协同,核心是减少 worker 切换、等待与竞争;worker_processes 推荐设为 auto,配合 worker_cpu_affinity auto 绑核,accept_mutex off + multi_accept on 提升连接吞吐,worker_priority 与 rlimit 保障资源。

Nginx 处理高并发下的进程调度,核心不是传统“线程抢占式调度”,而是靠 master-worker 模型 + 事件驱动 + 系统级协同 实现高效资源分发。关键不在“让哪个进程多干活”,而在“让每个 worker 少切换、少等待、少竞争”。
worker 进程数量要匹配 CPU 资源
worker_processes 决定了并行处理单元数。设太多会引发上下文切换开销;设太少则无法压满 CPU。
- 推荐设为
auto,Nginx 自动读取 CPU 核心数(含超线程) - 对重度计算型业务(如复杂 rewrite 或 Lua 脚本),可设为 CPU 核数的 1.5–2 倍
- 避免固定写死数字(如
worker_processes 8),否则在容器或云环境易失配
让每个 worker 绑定专属 CPU 核心
启用 worker_cpu_affinity auto 后,每个 worker 进程会被自动绑定到独立 CPU 核心上。
- 减少跨核缓存失效(cache line bouncing),提升 L1/L2 缓存命中率
- 在 NUMA 架构服务器上效果更明显——避免远端内存访问延迟
- 若手动指定,格式如
worker_cpu_affinity 0001 0010 0100 1000;(4 个 worker 各占 1 核)
消除 worker 间连接争抢:关闭 accept 互斥锁
默认开启 accept_mutex on,导致新连接只能被一个 worker 顺序接受,其余空转等待。
- 高并发下这会成为瓶颈,尤其当请求突发时
- 改为
accept_mutex off,所有 worker 可同时调用accept(),大幅提升连接接纳吞吐 - 需配合
multi_accept on,使单次 epoll_wait 返回后尽可能多地 accept 新连接
优先级与资源保障:让 worker 更快拿到 CPU 时间
worker 进程默认以普通优先级运行,但在高负载下可能被其他服务抢占。
- 用
worker_priority -10降低 Nice 值(数值越小,优先级越高),确保 Nginx 更快响应事件 - 搭配
worker_rlimit_nofile 65535,防止因文件描述符不足被迫降级或阻塞 - 注意:该设置需系统 ulimit 同步生效(
/etc/security/limits.conf中配置 soft/hard nofile)


















