核心是精准匹配硬件:worker_processes设8或12(≥16核时),worker_connections按峰值×1.2设(如3万连接配32768),启用keepalive 200、proxy_http_version 1.1、proxy_read_timeout 55s,并收紧缓冲区与日志。

优化 Nginx 负载均衡器在高负载下的系统资源消耗,核心是控制内存、CPU、文件句柄和网络连接的协同开销,避免配置冗余与内核限制成为瓶颈。不靠扩容,而靠精配。
worker 进程与连接数精准匹配硬件
过多 worker 进程会加剧上下文切换和内存碎片;过少则无法压满 CPU。关键不是“auto”,而是显式对齐物理核数:
- CPU 物理核心 ≥16 时,设 worker_processes 8 或 12(非 auto,尤其容器中易误判超线程)
- worker_connections 按单机峰值并发 ×1.2 设置,例如承载 3 万活跃连接,设为 32768 即可,无需拉到 65535
- 必须满足:worker_rlimit_nofile ≥ worker_processes × worker_connections,否则启动即报 “Too many open files”
- 启用 worker_cpu_affinity auto,让每个 worker 绑定独立物理核,减少缓存抖动
长连接池与上游复用策略
默认短连接模式在百亿级请求下会引发海量 TCP 握手、TIME_WAIT 堆积和内核 socket 缓冲膨胀。必须启用上游长连接池:
- 在 upstream 块中配置:keepalive 100–300(值按后端吞吐能力调,如 Tomcat connectionTimeout=60s,则设 200 较稳)
- 强制使用 HTTP/1.1 并清理连接头:proxy_http_version 1.1; proxy_set_header Connection "";
- proxy_read_timeout 设为比后端 keepalive timeout 小 5–10 秒(如后端 60s,Nginx 设 55s),防止主动断连导致后端连接泄漏
- 搭配 least_conn 算法,动态将新请求导向当前连接数最少的后端,缓解长连接倾斜
缓冲区与日志按需裁剪
默认缓冲区在高并发下极易放大内存压力——10 万连接各持一个 4KB proxy_buffer,就吃掉 400MB。要分层收紧:
- client_header_buffer_size 1k;large_client_header_buffers 2 2k(总 header 不超 4KB,防攻击)
- client_body_buffer_size 和 proxy_buffer_size 改为 2k–4k,非必要不保留 8k 默认值
- client_max_body_size 50m 显式限制上传,防大文件耗尽内存
- 全局关闭日志:access_log off; log_not_found off;,仅对关键域名或路径单独开启
系统级参数同步调优
Nginx 配置再优,系统限制没放开,照样卡死。必须同步调整内核与用户限制:
- /etc/security/limits.conf 中为 nginx 用户设:nofile 1048576
- /etc/sysctl.conf 加入:net.core.somaxconn = 65535、net.ipv4.tcp_tw_reuse = 1、fs.file-max = 2097152
- 重启前执行 sysctl -p 生效,并确认 ulimit -n 输出为预期值

















