curl 慢得像蜗牛?先用 -w 把耗时拆成三段再下结论
【摘要】 线上接口突然变慢,第一反应往往是"后端挂了"。但先别急着重启服务——用 curl -w 把一次请求的耗时拆开,很多时候慢的根本不是后端。一条命令就够:curl -o /dev/null -s -w 'dns:%{time_namelookup} conn:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} tot...
线上接口突然变慢,第一反应往往是"后端挂了"。但先别急着重启服务——用 curl -w 把一次请求的耗时拆开,很多时候慢的根本不是后端。
一条命令就够:
curl -o /dev/null -s -w 'dns:%{time_namelookup} conn:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}\n' https://example.com/api
五个数字对应五个阶段:
time_namelookup:DNS 解析耗时。这一段大,先查本地 DNS 和运营商解析,别去动应用。time_connect:TCP 建连耗时。从 namelookup 结束算起。这一段大,多半是网络链路或对端防火墙/安全组的问题。time_appconnect:TLS 握手耗时(HTTPS 才有)。证书链过长、OCSP 检查卡住都会拖慢这一段。time_starttransfer:首字节时间。从请求发出到收到第一个字节——这一段大,才轮到怀疑后端逻辑或数据库。time_total:总耗时,用来和上面四段对账。
对号入座举例:dns:0.002 conn:2.104 tls:0.001,慢在建连,查网络;ttfb 占比超过总耗时八成,再去看应用日志和慢查询。
两个容易踩的坑:
- 第一次慢、后面几次快:可能是 DNS 缓存或连接复用生效了,对比时要固定条件(比如每次都加
--resolve或清掉复用)。 - 忘记加
-o /dev/null -s:进度条和 body 输出会干扰计时,计时场景下 body 本来也不用看。
排查顺序总结:先拆耗时,再定位到 DNS / 网络 / TLS / 后端中的一段,最后才去动那一段的配置。慢请求不可怕,可怕的是没拆开就全盘重启——重启治不好 DNS。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)