加权轮询本身无显著性能开销,Nginx采用纳秒级平滑加权轮询算法;排查重点是验证权重是否正确应用、流量是否匹配预期,需检查配置语法、重载生效、日志统计分布,并排除健康检查、连接复用及重试干扰。

加权轮询本身不引入显著性能开销,Nginx 在请求分发时采用确定性调度算法(如平滑加权轮询),计算过程仅涉及整数加减和比较,单次决策耗时在纳秒级,对吞吐量和延迟几乎无影响。排查重点不在“权重计算开销”,而在于验证权重是否被正确应用、是否与实际流量分布匹配,以及是否存在配置或环境干扰导致预期偏差。
确认权重是否真正生效
检查 Nginx 配置中 weight 参数语法是否规范:等号前后不能有空格,如 server 192.168.1.10:8080 weight=3;(不是 weight = 3);权重值必须为正整数,不支持小数或变量。修改后需执行 nginx -t && nginx -s reload,避免配置未加载。
观测实际流量分配比例
仅看 upstream 配置无法判断效果,必须结合真实访问日志或监控数据验证:
- 在每台后端服务器的 access log 中添加
$upstream_addr或打标来源,统计各节点接收请求数 - 用
log_format定义含$upstream_addr的日志格式,在 Nginx 日志中直接看到每次转发目标 - 发起足够多请求(建议 ≥1000 次),用
awk统计分布,例如:awk '{print $NF}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
排除健康检查与连接复用干扰
以下因素会掩盖权重效果,造成“看似没按权重分发”:
-
健康检查失败:若某台高权重服务器因
health_check被临时摘除,剩余节点会按新权重比例重分配,但配置未变 - keepalive 连接复用:客户端复用 TCP 连接时,后续请求可能持续打到同一后端,尤其在低并发测试中易误判
-
上游服务响应慢或超时:Nginx 可能触发重试(如配置了
proxy_next_upstream),导致某节点被重复选择
对比基准:轮询 vs 加权轮询的实际差异
可快速搭建对照组验证:
- 部署两套 upstream:一组纯轮询(三台同权重),一组加权(如 3:2:1)
- 用相同压测工具(如
ab -n 3000 -c 50)分别打两组 - 比对日志中各节点请求数占比 —— 加权组应接近 50% : 33.3% : 16.7%,而非 33.3% 均匀分布



















