nginx负载均衡性能基准测试需将upstream集群作为整体压测,还原客户端→nginx→多后端链路,聚焦算法分发验证、吞吐上限、瓶颈定位及配置影响;须分离压测机与nginx、统一后端响应、清空缓存;推荐wrk观测p50/p95延迟分布,配合健康检查与实时监控;调优须单变量对照实验。

在 Nginx 中定义负载均衡器的性能基准测试,核心是把 upstream 集群当作一个整体服务单元来压测,而不是只测单台后端或 Nginx 代理本身。关键在于还原真实链路:客户端 → Nginx(负载均衡层)→ 多个后端服务 → 返回响应,并全程控制变量、可观测、可归因。
明确测试目标与压测范围
先锁定你要验证的具体能力:
- 验证轮询/加权/least_conn 等算法是否按预期分发请求(可用日志或后端计数器确认)
- 测集群整体吞吐上限(QPS 平台期、P95 延迟突增点)
- 查瓶颈位置:是 Nginx 代理卡住?还是某台后端响应慢拖累全局?或是健康检查失效导致流量打到故障节点?
- 评估配置变更影响,比如调整
keepalive_timeout、proxy_buffers或启用proxy_cache
搭建可信的测试链路
必须满足三个硬条件,否则结果失真:
- 分离压测机与 Nginx 服务器:不能在同一台机器跑 wrk 和 nginx,避免资源争抢;两者需同局域网直连(推荐万兆),排除网络抖动干扰
- 后端服务统一、可控:所有 upstream server 提供相同静态响应(如返回固定 JSON 或 2KB HTML),关闭日志、禁用缓存、不依赖数据库,确保差异只来自 Nginx 调度逻辑
-
清空干扰项:每次压测前执行
sync && echo 3 > /proc/sys/vm/drop_caches,并重启 Nginx(或至少nginx -s reload)保证配置生效且无旧连接残留
用 wrk 模拟真实流量并观测多维指标
ab 只能看平均值,而负载均衡效果要看分布——wrk 是唯一推荐工具:
- 基础命令示例:
wrk -t4 -c1000 -d120s --latency http://nginx-lb-ip/(4线程、1000并发、2分钟,输出延迟分布) - 重点观察 P50/P95/P99 延迟是否随并发上升而陡增——若 P95 比 P50 高 5 倍以上,说明存在长尾,大概率是某台后端响应异常或健康检查未生效
- 同步在 Nginx 侧运行
nginx -V 2>&1 | grep -o 'with.*module'确认已编译http_upstream_check_module(如有),并开启check interval=2 rise=2 fall=3 timeout=1类健康检查配置 - 压测中实时监控:
ss -s查 ESTAB 连接数、htop看 Nginx worker CPU 是否均衡、tail -f access.log抽样验证请求是否均匀落到各 backend IP
设计对照实验验证调优效果
一次只改一个 upstream 参数,其他全冻结:
- 对比
round robinvsleast_conn:保持后端数量/权重/健康状态一致,看高并发下 P95 是否下降 - 验证
max_fails=2 fail_timeout=30s是否真正生效:手动停掉一台 backend,观察 wrk 错误率是否在 30 秒内回落,且剩余节点 QPS 补偿是否及时 - 测试
proxy_next_upstream error timeout http_500开关对失败请求重试率的影响,用 wrk 的Failed requests和后端 access.log 中 5xx 计数交叉比对











