nginx worker进程优化核心是精准匹配cpu物理核心、绑定亲和性、配平连接资源。推荐设worker_processes auto;(≥1.9.10),禁用accept_mutex启用multi_accept on;,配合worker_cpu_affinity auto;和worker_rlimit_nofile≥worker_connections×worker_processes。

Nginx 的 Worker Process 是处理并发请求的核心执行单元,它不靠“堆进程”来扛流量,而是通过精准匹配硬件能力、减少调度干扰、高效复用资源来应对大流量。关键不是数量多,而是每个 worker 跑得稳、不抢、不卡、不漏。
worker 进程数要贴合物理核,别盲目设高
设太多 worker 反而拖慢性能——64 核机器启 64 个 worker,上下文切换和内存碎片会明显上升。
推荐做法:
- 物理服务器:用 worker_processes auto;,Nginx 1.9.10+ 会自动识别物理核心数,跳过超线程逻辑核
- ≥16 核时,显式设为 8 或 12 更稳妥,兼顾吞吐与调度开销
- 容器环境(如 K8s)必须手动指定,比如 worker_processes 4;,不能依赖 auto,否则可能启动过多进程却争抢少数 CPU
CPU 亲和性必须配准,让每个 worker 定点运行
worker 进程频繁跨核迁移,会导致缓存失效、TLB 刷新、寄存器反复保存恢复,上下文切换激增。
正确配置:
- worker_cpu_affinity auto;(Nginx ≥1.9.10),自动绑定到不同物理核,无需手算掩码
- 禁用 accept_mutex on;,改用 multi_accept on;,允许多个 worker 并行 accept 连接
- 不要混用 worker_priority 或外部绑核脚本,避免冲突
连接资源必须配平,单 worker 才能撑得住
worker 能否稳定跑满,取决于它有没有足够且可用的文件描述符和事件处理能力。
关键组合:
- worker_rlimit_nofile 设为系统 ulimit 值(如 65535 或 1048576),且 ≥ worker_connections × worker_processes
- worker_connections 按单机峰值连接 ×1.2 设置(例如预期 3 万长连接,设 32768 即可),不建议一律拉到 65535
- use epoll; + multi_accept on;,提升单次事件循环收连接效率
连接生命周期要管住,防止积压泄漏
worker 不只是“接进来”,更要“送出去”——后端响应慢或连接复用不当,会让连接在 Nginx 层堆积,最终耗尽资源。
必须做:
- upstream 中启用 keepalive 200;(100–300 区间按后端吞吐微调)
- server 块中透传 HTTP/1.1 长连接:proxy_http_version 1.1; + proxy_set_header Connection "";
- proxy_read_timeout 设为略小于后端 keepalive timeout(如后端 60s,Nginx 设 55s),避免连接挂死











