首页/网络/抓包与流量分析速查/TTFB 慢的逐段拆解
应用层报文判读71 条

TTFB 慢的逐段拆解

首字节时间 = 连接建立 + 请求发送 + 服务端处理 + 首字节传输;把四段各自算出来,才能判断该查网络、查应用还是查 DNS/TLS。

首字节时间逐段拆解

首字节时间指的是从请求最后一个字节发出,到收到响应第一个字节之间的等待,它由连接建立、请求发送、服务端处理、首字节回传四段构成。把这四段分别算出来,才能判断接下来该查网络、查应用,还是查域名解析与 TLS 握手。

基本信息

适用平台Wireshark 的帧时间戳与自定义列
测量口径响应首字节时刻减去请求末字节时刻
拆解前提要单独拆出服务端处理段,需在服务端侧同步抓包
辅助字段配合时间参考与帧间隔列读数更直观

典型使用场景

  • 快速判断慢在哪:先算总时长,再逐段相减
  • 区分网络与应用:单侧抓包只能得总和,两侧对照才能归因
  • 比较不同接口:请求体大小相当时对比才有意义
  • 关联前置阶段:域名解析与握手耗时属于更早的环节,单独统计
  • 输出到报告:把每段实测数值写清楚,便于他人复核

拆解口径

拆解口径
# T0 = 请求最后一个字节发出的时刻
# T1 = 响应第一个字节到达的时刻
# 首字节时间 = T1 - T0
# 服务端处理 = 服务端发出首字节时刻 - 服务端收到请求时刻

分段归属

分段在哪测偏慢时查什么
连接建立SYN 到 SYN-ACK网络链路与队列
请求发送请求首字节到末字节上行带宽与窗口
服务端处理服务端收到请求到发出首字节应用与下游依赖
首字节回传服务端发出到客户端收到下行链路与时延
单侧抓包只能得到首字节时间的总和。要把服务端处理这一段单独拆出来,必须在服务端侧同步抓一份,或者直接取应用日志里的处理耗时。
对比不同接口的耗时之前,先确认请求体大小相当。上传大文件与只读查询的耗时构成完全不同,直接比较会得出误导性的结论。
域名解析与建立加密连接的耗时属于首字节时间之外的阶段。排查整体加载速度时要单独统计,混在一起算会高估服务端的责任。

易错点

  • 客户端侧的首字节时间含网络往返,不等于服务端处理时间
  • 对比不同接口时确保请求体大小相当,否则传输时间混淆归因
  • 把解析与握手耗时算进首字节时间,会得出偏大的结论并误判应用慢
  • 只测一次就下结论:单次样本受抖动影响大,应统计多次取分布

数据来源与参考

  • Wireshark User's Guide(时间列)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌