waiting值偏低表明连接刚建立即被读写占用或迅速断开,常反映后端响应慢、连接池不足、网络不稳定或超时设置过短等延迟瓶颈,需针对性优化。

直接看 Waiting 值本身不能优化延迟,它只是结果反馈;真正要降低连接处理延迟,得结合它的含义定位瓶颈环节,并针对性调整。
理解 Waiting 的真实含义
Waiting 表示当前处于 keep-alive 空闲状态的连接数,即已建立但暂无数据收发的长连接。它等于:Active − (Reading + Writing)
这个值高,通常说明:客户端复用连接频繁、后端响应快、网络稳定;
这个值低甚至趋近于 0,才值得警惕——意味着连接刚建立就立刻被读写占用,或很快断开,背后往往藏着延迟问题。
Waiting 异常偏低时的典型原因与应对
当 Waiting 明显偏小(比如长期
- 后端响应慢:Writing 持续高位,连接卡在发送响应阶段。检查 upstream 超时设置(proxy_read_timeout)、后端服务 P99 延迟、数据库慢查询
-
客户端行为异常:Reading 长时间不归零,可能遭遇慢速 HTTP 攻击(如 Slowloris)或弱网设备持续发小包。启用
client_header_timeout和client_body_timeout限制读头/读体时间 -
keep-alive 被主动关闭:Nginx 或上游服务设置了过短的
keepalive_timeout,导致连接无法空闲驻留。建议设为 60–75 秒,并确保后端也同步配置 -
TCP 层问题干扰:抓包发现大量重传或 RST,说明网络链路不稳定或防火墙策略干预。此时 Waiting 会剧烈抖动,需结合
netstat -s | grep -i "retrans"验证
配合其他指标交叉判断延迟根因
单看 Waiting 容易误判,必须和以下指标联动分析:
- 若
Active高 +Waiting低 +Writing高 → 后端吞吐不足或响应阻塞 - 若
Active中等 +Waiting接近 0 +Reading波动大 → 客户端连接建立后迟迟不发完整请求,关注 TLS 握手或首包延迟 - 若
Waiting突降伴随accepts/handled差值拉大 → 可能出现连接拒绝(如somaxconn不足或tcp_max_syn_backlog溢出)
验证优化是否生效的方法
调整后不要只盯 Waiting 数字,重点观察实际业务延迟变化:
- 用
curl -w "@format.txt" -o /dev/null -s http://test/测 TTFB(time_starttransfer),确认首字节返回是否加快 - 在 Nginx log 中加入
$upstream_connect_time $upstream_header_time $upstream_response_time,定位延迟发生在连接、首包还是整体响应阶段 - 对比优化前后相同 QPS 下的
Waiting / Active比值趋势,稳定回升至 60%~85% 区间是健康信号










