接口超时先别急着重启:用 curl 四段定位到底卡在哪一步

举报
yd_246130537 发表于 2026/10/31 09:48:40 2026/10/31
【摘要】 调用接口超时,第一反应往往是重启服务。但重启只能掩盖问题:如果是 DNS 慢、证书过期、后端 SQL 慢,重启后照样超时。curl 自带的分段计时,能把一次请求拆成 DNS 解析、TCP 建连、TLS 握手、服务端处理四段,哪段慢就修哪段。先用一条命令拿到分段耗时:curl -o /dev/null -s -w 'dns:%{time_namelookup} connect:%{time_c...

调用接口超时,第一反应往往是重启服务。但重启只能掩盖问题:如果是 DNS 慢、证书过期、后端 SQL 慢,重启后照样超时。curl 自带的分段计时,能把一次请求拆成 DNS 解析、TCP 建连、TLS 握手、服务端处理四段,哪段慢就修哪段。
先用一条命令拿到分段耗时:curl -o /dev/null -s -w 'dns:%{time_namelookup} connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}' https://example.com/api/health
五个数字分别对应:DNS 解析耗时、TCP 建连耗时、TLS 握手完成耗时、首字节耗时、总耗时。对比它们,就能定位。
第一段:DNS 慢。time_namelookup 就很大,比如超过 1 秒。先用 dig +trace 或 nslookup 看解析走哪台服务器,再检查本机 /etc/resolv.conf 是不是指向了响应慢的 DNS。内网服务更常见的是写错了域名后缀,或者 hosts 里残留了旧 IP。修 DNS 配置,别在应用层加重试硬扛。
第二段:TCP 建连慢。time_connect 大,说明包到了对方门口却握手慢。先确认对方端口确实在监听:ss -tlnp | grep 端口。再看防火墙和安全组:云服务器上最常见的就是安全组没放行,或者本机 iptables 规则把出方向拦住了。用 telnet IP 端口或 nc -vz IP 端口做一次裸连测试,能通说明网络没问题,问题在上层。
第三段:TLS 握手慢或失败。time_appconnect 明显大于 time_connect,或者直接报证书错误。先用 curl -v 看握手停在哪一步,再用 openssl s_client -connect 域名:443 -servername 域名检查证书链是否完整、是否过期、有没有混用旧 TLS 版本。自签证书、中间证书缺失、证书过期,这三类问题在浏览器里可能只显示一个含糊的报错,在 openssl 输出里却一目了然。
第四段:服务端处理慢。前面三段都很快,只有 time_starttransfer 大,说明请求已经进了服务端,是后端处理慢。这时别再折腾网络,去看服务端日志和慢查询:接口是不是没走索引、是不是在循环里调了外部接口、有没有锁表。可以在服务端加一行耗时日志,把“收到请求”和“返回响应”两个时间点打出来,和 curl 的 TTFB 对上,责任立刻分清。
还有一类容易误判的情况:总耗时刚好卡在超时阈值上,比如应用设了 5 秒超时,而接口平时 4.8 秒。平时能跑、偶尔超时,根因往往是偶发的慢查询或 GC 停顿。把超时阈值调大只是把报错往后推,正确做法是先修慢的那一段,再根据 P95 耗时定一个留有余量的阈值。
排查顺序建议固定下来:先跑分段计时定段,再按段用对应工具验证,最后只改确认有问题的那一处。改完再跑一次同样的 curl 命令,对比五个数字,确认慢的那段真的降下来了,再收工。这样下次再遇到超时,不用凭感觉重启,一条命令就能说清卡在哪一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。