用户所说的“超时”可能发生在名称解析、TCP连接、TLS握手、应用处理或响应传输阶段。若不区分这些阶段,容易在应用代码里寻找网络故障,或把慢数据库误判成DNS问题。先量化每个阶段,再沿请求路径定位,是最有效的起点。
使用curl的写出格式记录名称解析、连接建立、TLS完成、首字节和总耗时。指标可包括time_namelookup、time_connect、time_appconnect、time_starttransfer与time_total。同一请求重复采样,并记录状态码、目标IP、协议族和时间。不要只记“请求花了几秒”,因为总时间无法指出瓶颈所在。
客户端请求包含重定向时,还需逐跳观察;最终URL耗时可能掩盖前一跳的等待。📊
如果名称解析时间高,而固定到目标地址后请求恢复,重点检查解析器和DNS路径。若连接时间长或无法建立,查看网络路由、NAT、端口策略和服务监听。TLS阶段显著变慢,应查看握手重试、证书链以及代理是否重复协商。前几段耗时正常而首字节很慢,通常意味着请求已经到达服务端,应继续追踪业务处理和依赖调用。
首字节时间不等于纯应用计算时间:它还可能包含排队、代理等待、数据库查询和同步下游调用。完整下载时间则额外受响应体大小与客户端带宽影响。将首字节和总耗时分开,可以避免把慢传输误判为慢后端。🔬
固定测试网络、路径、请求方法和请求数据,保存同一时间段的代理访问日志、应用日志和分布式追踪。若支持请求ID,确认它贯穿代理与应用;将代理上游响应时间、应用耗时及数据库或外部API调用时间对应起来。查看超时发生在哪个调用点,并比较健康请求与慢请求的依赖差异。⚙️
用P50、P95或P99等分位数观察窗口内分布,区分偶发慢请求与持续退化。单次样本适合形成假设,不能代表全体用户;不同地区或协议族的数据也应分开比较。📈
先设定与业务相关的分阶段目标,再用同一测试方法复测。验收应确认异常阶段的P95/P99改善、错误率降低,其他阶段未出现明显退化;同时核对代理和依赖追踪能够解释请求耗时。只有客户端计时与服务端时间线相互吻合,才算找到并验证了根因。🎯