nginx高并发依赖多进程与linux调度协同,关键在于worker进程独占cpu核心:设worker_processes auto,启用worker_cpu_affinity auto,关闭accept_mutex并开启multi_accept,配合worker_priority提升调度权重。

Nginx 的高并发能力不靠单点参数堆砌,而依赖多进程模型与 Linux 调度器的系统级协同。关键在于让每个 worker 进程稳定、低干扰地运行在专属 CPU 上,减少调度抖动、缓存失效和锁竞争。
worker_processes 与 CPU 核心数的动态匹配
设为 auto 是当前最稳妥的选择:Nginx 会读取逻辑 CPU 数(含超线程),并在 NUMA 多路服务器上自动适配物理拓扑。固定写死数字(如 8 或 16)在容器、云主机或热插拔 CPU 场景下极易失配。
- 对纯 I/O 密集型服务(如静态文件分发),保持
worker_processes auto即可 - 若启用大量 Lua 脚本、复杂正则 rewrite 或 TLS 卸载,可尝试设为物理核数的 1.5 倍,但需配合
worker_priority避免抢占 - 验证方式:启动后执行
ps -eo pid,comm,psr | grep nginx,确认各 worker 分布在不同 CPU ID 上
CPU 亲和性绑定:固化进程与核心的映射关系
默认情况下,Linux CFS 调度器会按负载迁移进程,导致一个 worker 在多个核心间跳转,频繁刷新 L1/L2 缓存和 TLB,显著拖慢响应。
本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 启用
worker_cpu_affinity auto(Nginx 1.9.10+),自动为每个 worker 分配独占核心 - 手动配置时,掩码位数必须与
worker_processes数量一致,例如 4 个 worker 对应worker_cpu_affinity 0001 0010 0100 1000 - 超线程环境下,建议按物理核分组绑定(如双核四线程,只用前两位掩码),避免两个 worker 共享同一物理核的执行单元
消除连接争抢:accept_mutex 关闭与 multi_accept 开启
默认开启的 accept_mutex on 会造成“排队领连接”现象——高并发突发时,多数 worker 空转等待,吞吐受限。
- 改为
accept_mutex off,所有 worker 可同时调用accept(),大幅提升连接接纳速率 - 必须搭配
multi_accept on,确保每次 epoll_wait 返回后尽可能多地取出就绪连接 - 前提条件是内核参数
net.core.somaxconn≥worker_connections,否则全连接队列溢出将丢弃新连接
调度优先级与资源保障:让 worker 更快拿到 CPU 时间
worker 是计算密集型任务,在混部环境中易被 cron、rsyslog、监控 agent 等后台进程抢占,引发响应毛刺。
- 设置
worker_priority -10(需 root 权限),提升其在 CFS 中的调度权重 - 对核心业务节点,可考虑
SCHED_FIFO实时策略,但务必配合rlimit限制 CPU 时间片,防失控 - 日志写入等 I/O 任务可通过
ionice -c 3设为 IDLE 类别,降低磁盘抢占影响










