worker_processes不可动态增减,需按cpu物理核心数或auto设置,容器环境须匹配cgroup限制,混部场景需预留资源,并配合worker_cpu_affinity、accept_mutex等参数及集群负载策略实现弹性响应。

worker_processes 本身不支持运行时动态增减——它是一个启动期固定参数。所谓“根据业务需求动态调优”,实际是指通过配置策略组合、系统协同与部署弹性,在流量变化时让 Nginx 集群整体表现出类似“动态响应”的效果。
按 CPU 资源精准设值,而非盲目填数
多数场景下应设为物理核心数(非超线程数),或直接使用 auto。但需注意:
- 容器环境必须匹配 cgroup 限制:若 Kubernetes 中限制了 CPU 为 2 核,就该显式写
worker_processes 2;,不能依赖 auto 读宿主机核数 - 混部服务器要预留资源:Nginx 与数据库共存时,可设为
$(nproc --all)-1,避免争抢 CPU - 高延迟后端可略上调:如反向代理大量慢接口,可设为核数 ×1.2,但优先优化
proxy_read_timeout和重试逻辑
绑定 CPU 与连接分发机制协同生效
只设进程数不够,必须配套关键参数才能发挥“削峰”作用:
-
worker_cpu_affinity auto;:确保每个 worker 绑定到独立物理核,减少缓存失效 -
accept_mutex on;(默认开启):让新连接轮询分发,避免所有请求涌向同一 worker -
multi_accept off;:禁用单次收多个连接,进一步平滑连接接入节奏
集群层靠负载策略实现弹性分担
单机调优是基础,真实削峰填谷依赖集群协同:
- 上游负载均衡选
least_conn或random two_choices,避免轮询导致节点冷热不均 - 所有 Nginx 节点统一启用
worker_cpu_affinity auto,防止容器调度错配 - 反向代理层设置合理超时:
proxy_connect_timeout 3s;、proxy_read_timeout 10s;,加快连接释放
可观测性驱动自动扩缩容
没有监控的调优等于盲调。必须落地两项能力:
- 暴露
/nginx_status接口,采集各节点Active connections指标,识别持续高负载实例 - 在 Kubernetes 等平台中,基于该指标触发 HPA,扩容新 Pod;旧 Pod 执行
nginx -s quit平滑退出











