← 中文资源

简体中文版本

排查 HTTP Keep-Alive 超时导致的连接重置

用抓包证明偶发连接重置来自代理或源站的空闲 keep-alive 超时,并把重置归因到正确的跳点。

阅读英文原文

目标

服务偶发 ECONNRESET 且没有明显规律,客户端复用了连接池,而这些连接可能被中间代理提前关闭。本配方通过抓包对比空闲间隔与各跳的 keep-alive 设置,判断是哪一侧超时关闭连接,从而修正连接池与代理配置。

步骤要点

  1. 只抓取相关流量,人为制造超过可疑超时时间的空闲间隔。
  2. 用 tshark 过滤 FIN/RST,查看哪个源地址发起重置。
  3. 把代理的 keep-alive 超时调到低于源站,避免连接被竞争关闭。
  4. 调整客户端连接池的最大空闲时间以匹配最短超时。
sudo tcpdump -i eth0 -w keepalive.pcap 'tcp port 443 and host 203.0.113.10'
# drive requests with 60s idle gaps
sleep 65
curl -sv https://api.example.com/health 2>&1 | tail -5

排错提示

  • 抓包时间太短可能看不到重置,需把空闲拉长到远超可疑超时。
  • 两侧都可能重置,需要按最短超时对齐。
  • 生产抓包涉及敏感数据,需注意合规。

适用边界

  • 需要抓包权限,生产环境可能受限。
  • 只负责归因,不直接修改超时配置。