首页/系统/Linux 运维命令速查/场景:HTTP 接口超时/502 排查
网络命令82 条

场景:HTTP 接口超时/502 排查

先用 curl 分清「连不上、慢、还是返回错」:状态码 + 耗时分解 + 绕过 DNS/网关直连后端,再决定查 Nginx、后端还是网络。

Linux 运维命令速查系统更新于 2026-10-13

这条排查路径解决什么

接口报 502/504 或者表现为「超时」时,问题位置可能有四处:DNS、网络链路、网关(Nginx 或负载均衡)、后端应用。curl 的 -w 能把一次请求的总耗时拆成 DNS 解析、TCP 连接、TLS 握手、首字节、传输各段,再用 --resolve 绕过 DNS 直连某台后端做对照,几分钟就能把范围收敛到其中一段,避免一上来就翻网关配置或改应用参数。

基本信息

适用场景接口 502/504、偶发超时、上传下载慢
核心工具curl -w 耗时分解、curl --resolve 指定解析、tcpdump 与网关日志旁证
关键判据哪一段耗时异常;直连后端是否同样慢
结论去向DNS 段异常查解析;连接段异常查链路与防火墙;TTFB 异常查应用;状态码查网关与后端分工

典型使用场景

  • 用户报「接口超时」:先看 name_lookup 与 connect,判断是解析连通性问题还是应用慢
  • 502 Bad Gateway:直连后端端口确认后端是否存活,再看网关 upstream 配置与健康检查
  • 间歇性慢:同一接口连打十几次,用 -w 逐次记录分段耗时找规律
  • 证书与握手问题:appconnect 段失败或报证书错误,转用 openssl s_client 深入
  • 上量前后对比:发布前后各打一轮,用同一套指标确认是否引入退化

耗时分解

耗时分解
curl -sS -o /dev/null \
  -w 'dns=%{time_namelookup} conn=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total} code=%{http_code}\n' \
  --max-time 15 https://api.example.com/health   # 一次请求拆成五段耗时

绕过 DNS 直连后端对比

绕过 DNS 直连后端对比
curl -sS --resolve api.example.com:443:10.0.0.9 \
  -o /dev/null -w 'via-gateway code=%{http_code} total=%{time_total}\n' https://api.example.com/health   # 指定解析到某台后端
curl -sS -o /dev/null -w 'direct-backend code=%{http_code} total=%{time_total}\n' \
  http://10.0.0.9:8080/health   # 后端机本机直测,绕开网关

旁证材料

旁证材料
tail -n 50 /var/log/nginx/error.log                          # 网关侧错误原因
ss -tn state established '( dport = :8080 )' | wc -l           # 后端机上:当前压在 8080 的连接数
ss -s                                                          # 连接总数与 TIME-WAIT 概况
nginx -T | grep -A5 'upstream'                                 # 确认实际生效的 upstream 与超时参数

耗时字段逐项读法

字段含义正常与异常
time_namelookupDNS 解析完成用时几十毫秒内;持续几百毫秒说明解析慢或有超时重试
time_connectTCP 三次握手完成用时内网几毫秒、公网几十毫秒;明显偏大说明链路丢包或拥塞
time_appconnectTLS 握手完成用时(HTTPS)超过 200ms 要查证书链长度与会话复用
time_starttransfer首字节到达,已包含前面所有阶段即 TTFB,显著高于前面几项之和说明后端处理慢
time_total整次请求总耗时与业务超时阈值对比,判断是刚好超时还是深度超时
http_codeHTTP 状态码502 是网关拿到无效响应,504 是网关等后端超时,两者指向不同方向
快速判据:TTFB 高且后端直测也慢,问题在应用;整条链路慢但直连后端很快,问题在网关或中间网络;name_lookup 异常突出,先换 DNS 再谈应用。
不要把 502 与 504 混为一谈:502 表示网关从后端拿到无效响应(进程崩了、提前断开、协议不符),504 表示网关在超时时间内没等到后端响应(后端慢或被限流)。顺着这两个方向查,比盲目调大 Nginx 超时参数有效得多。

易错点

  • time_starttransfer(TTFB)已经包含 TLS 握手时间,计算纯服务端处理耗时要减掉 appconnect
  • time_namelookup 异常大是很多「接口慢」的隐藏原因,且最容易被误判为后端问题
  • 加 -k 跳过证书校验能把请求打通,但会掩盖证书过期或链不全,只用于快速定位,不要留在脚本里
  • --resolve 只在这条命令内生效,不代表 DNS 或 hosts 已经修好;对照组要一直用同一种方式打
  • -w 输出必须配合 -o /dev/null,否则响应体会混进统计文本,脚本解析会出错

数据来源与参考

  • curl 官方文档(curl.se/docs/manpage.html)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌