应设为物理CPU核心数并绑定CPU亲和性,避免超线程干扰、降低调度开销、提升缓存命中率;推荐worker_processes auto配合worker_cpu_affinity auto,容器/K8s中需按cgroups限制对齐,并同步调高ulimit与worker_rlimit_nofile。

直接让每个 Nginx worker 进程固定绑定到独立 CPU 核心,是最有效、最落地的多核调度优化方式。它避免了操作系统频繁调度带来的上下文切换开销,提升 L1/L2 缓存命中率,从而显著提高吞吐量和响应稳定性。
worker_processes 必须匹配物理核心数
不能沿用默认的 worker_processes 1。应设为 auto,Nginx 会自动读取 /proc/cpuinfo 并设置与逻辑 CPU 核心数一致的进程数:
- worker_processes auto; —— 推荐首选,适配虚拟化、容器等环境
- 若需手动控制(如 NUMA 架构),可显式写死,例如 8 核服务器设为 worker_processes 8;
- 不建议设为超过物理核心数的值(如 16 核机器设 32 个 worker),反而引发争抢和缓存抖动
必须启用 CPU 亲和性绑定
仅靠多进程还不够,关键是要让每个 worker 稳定运行在专属核心上。否则 Linux 调度器可能把多个 worker 调度到同一核心,其他核心空转:
- worker_cpu_affinity auto; —— 自动按最优策略绑定(如 8 核 → 绑定 CPU0~CPU7)
- 手动配置适用于特殊场景(如屏蔽某核心、NUMA 感知部署),格式为二进制掩码,例如 4 核: worker_cpu_affinity 0001 0010 0100 1000;
- 验证是否生效:启动后执行
ps -eo pid,psr,comm | grep nginx,观察各 worker 的 PSR(CPU ID)是否分散且稳定
同步调高系统资源上限
调度策略再优,也会被系统级限制卡住。worker 进程数增加后,必须解除文件描述符、连接队列等瓶颈:
- 在
nginx.conf中设置:worker_rlimit_nofile 65535; - 在
/etc/security/limits.conf中补充:
* soft nofile 1000000
* hard nofile 1000000 - 内核参数调优(
/etc/sysctl.conf):
fs.file-max = 2097152
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
配合事件模型与连接行为优化
调度策略要和事件处理机制协同,才能真正释放多核能力:
- events 块中启用高效模型:use epoll;(Linux 默认,但显式声明更稳妥)
- 开启批量接受连接:multi_accept on;,减少单次循环只收一个连接的浪费
- 适当增大单进程连接数:worker_connections 10240;,配合前面的 rlimit 提升并发容量
- 避免混用冲突指令:比如在 upstream 中同时配置
ip_hash和weight,会触发冗余判断逻辑,增加 worker 调度负担


















