高并发压测时CPU抖动不明显,源于Nginx Master-Worker模型的天然隔离:Master进程低负载休眠、不参与请求处理;Worker进程绑定CPU核心、无共享、事件驱动,规避调度竞争、缓存失效与锁争用。
高并发压测时 CPU 抖动不明显,不是因为 Nginx “不忙”,而是它的 Master-Worker 进程模型天然隔离了调度扰动源——真正处理请求的 Worker 进程是固定、独立、无共享的,而抖动最常发生的调度竞争、缓存失效、TLB 刷新等开销,被有效规避或大幅削弱。
Master 进程只做配置加载、信号监听、Worker 管控和异常重启,全程几乎不涉及网络 I/O、连接读写或内存密集计算。它常年处于低负载休眠状态(select/poll 等待信号),CPU 使用率通常低于 0.5%,且不随并发增长而上升。压测中看到的稳定 CPU 曲线,很大一部分就来自这个“静默管理者”。
每个 Worker 是一个独立进程,拥有专属内存空间与文件描述符。当配合 worker_cpu_affinity 绑定到指定物理核心后:
实测表明:启用亲和性后,每秒上下文切换(cs)可从 50 万+ 降至 1–2 万,P99 延迟抖动收敛 60% 以上。
Worker 进程之间不共享内存、不共用连接池、不争抢 accept 锁(accept_mutex off 后更彻底)。每个 Worker 通过 epoll 单线程轮询自身监听的 socket,所有 I/O 操作非阻塞,没有线程挂起/唤醒的调度抖动。即使单个 Worker 因 GC、SSL 握手或后端延迟出现微卡顿,也不会波及其他 Worker,整体 CPU 负载呈现“多峰平稳”而非“尖刺震荡”。
很多压测工具(如 wrk、ab 默认模式)采用固定连接数+匀速发包,流量平滑;若未开启 keepalive_requests 或使用短连接高频建连,真实抖动会体现在 syscall(connect/accept)、TIME_WAIT 处理、SYN 队列溢出等环节,但这些开销多数落在内核态,不直接反映为用户态 CPU 使用率波动。此时需结合 perf sched latency、pidstat -w 或 eBPF 工具观测实际调度延迟,而非仅盯 top 的 %us。