← 中文资源

简体中文版本

用 curl 时间分解复现接口超时

把慢请求拆成 DNS、连接、TLS 与首字节各阶段耗时,证明延迟到底消耗在网络还是服务端。

阅读英文原文

目标

用户偶发遇到八秒延迟,但服务端指标显示处理很快,怀疑延迟出在连接建立阶段。本配方用 curl 的分阶段计时输出,把一次请求拆成 DNS、连接、TLS、首字节与总耗时,并通过重复采样暴露方差,从而定位真正的瓶颈阶段。

步骤要点

  1. 用 curl 的 write-out 变量记录 DNS、连接、TLS 与首字节各阶段耗时。
  2. 循环采样并排序,观察方差与离群值。
  3. 用固定 IP 对比,把解析器延迟与连接延迟分开。
  4. 针对主导阶段实施修复后再次采样验证。
curl -o /dev/null -s -w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' \
  https://api.example.com/v1/search?q=test

排错提示

  • 客户端计时包含本地网络,不等于服务端耗时。
  • 单次采样不能作为证据,必须重复采样。
  • TLS 仅能观察握手时长,不能反映 CPU 成本。

适用边界

  • 只覆盖客户端视角,无法替代服务端追踪。
  • 需要能复现偶发慢请求的采样量。