nginx多进程资源优化需按进程独立配置:worker数量匹配物理核心数,worker_connections与worker_rlimit_nofile协同设限,client_body_buffer_size等参数按单进程视角控制内存与连接生命周期,并通过worker_cpu_affinity绑定cpu提升缓存局部性。

Nginx 多进程架构中,进程级资源有效配置不是靠“统一分配”,而是通过 master 进程统一设定、worker 进程独立继承并按需使用的机制来实现。关键在于让每个 worker 拥有恰到好处的资源上限,既不浪费也不争抢,同时避免跨进程干扰。
worker 进程数量要匹配物理核心数
这是资源分配的第一层基准:
- 设置
worker_processes auto;,Nginx 自动读取逻辑 CPU 核心数(非超线程总数),避免 worker 过多导致调度开销上升 - 若部署在容器或 NUMA 环境中,需先确认实际可用核心数(如
lscpu | grep "CPU(s)"),再手动设为具体数值,防止 auto 误判 - 不建议设为远高于核心数的值(如 32 个 worker 跑在 4 核机器上),否则会加剧锁竞争与上下文切换
每个 worker 的连接与文件资源需独立限定
worker 之间不共享连接池或文件描述符,因此必须为单个进程设置硬性上限:
-
worker_connections 10240;是常见合理值,结合worker_processes auto可推算整机理论并发上限 - 必须配套
worker_rlimit_nofile 65535;,否则系统级文件描述符限制会卡住连接接纳 - 同步调大操作系统限制:
ulimit -n 65535或写入/etc/security/limits.conf,否则配置无效
内存与请求资源按需隔离控制
每个 worker 独立管理自身内存和请求生命周期,配置需体现“单进程视角”:
-
client_body_buffer_size 16k;和client_max_body_size 10m;限制单请求缓冲区与上传大小,防止单个大请求耗尽某 worker 内存 -
keepalive_timeout 65;、send_timeout 10;、read_timeout 10;分阶段约束连接生命周期,避免长连接滞留占用资源 - 启用
reset_timedout_connection on;可主动回收僵死连接,减少无效连接堆积
CPU 与缓存资源绑定提升局部性
让 worker 稳定运行在固定核心,减少迁移带来的 L1/L2 缓存失效:
-
worker_cpu_affinity auto;(Nginx 1.9.10+)自动完成一对一绑定,是最简可靠方案 - 验证是否生效:
ps -eo pid,psr,comm | grep 'nginx: worker'应显示每个 PID 固定对应一个 PSR 编号 - HTTPS 场景下尤其重要——TLS 加解密高度依赖缓存热度,跨核迁移会使性能明显下降
不复杂但容易忽略











