用 curl 拆解一次网页请求的耗时
网站变慢时,一个总耗时数字不能说明问题。DNS、连接、TLS、服务端处理与下载,都可能成为瓶颈。curl 的时间字段可以帮助建立最初的判断。
先理解这些时间是累计值
time_namelookup 表示域名解析完成的时间;time_connect 表示 TCP 连接建立完成;time_appconnect 常用于 HTTPS 握手完成。它们通常从请求开始累计,不能把几个值直接相加当作总耗时。连接复用和重定向会影响解释。
区分首字节与总时间
time_starttransfer 代表开始收到响应的时间,总时间还包括接收响应正文。首字节慢可能涉及服务端、网络往返、握手或代理排队,不应立刻认定数据库慢。总时间长而首字节快,可以进一步检查文件体积和传输速度。
对照测试比单次结果有用
在相近时间重复几次,分别测试静态小文件和实际页面。必要时区分 IPv4 与 IPv6。不要用跳过证书校验来隐藏 TLS 故障;也不要对不属于自己的站点进行高频压测。
把结果写成可比较的记录
保留测试位置、时间、目标 URL、状态码和是否经过代理。一次测试可能命中缓存,另一次可能走回源,因此需要结合响应头判断。网络计时是线索,最终仍需服务器日志、应用指标或抓包提供证据。
操作参考
1 | curl -sS -o /dev/null -w "dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} first_byte=%{time_starttransfer} total=%{time_total} status=%{http_code}\n" https://example.com/ |
示例中的域名、文件名和地址需按实际环境替换。涉及生产配置时,先保留可恢复副本,再做修改。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 SkynetX!