一次"用户反馈卡顿,服务器一切正常"的排障复盘

0 阅读8分钟

这篇文章不讲八股,讲一个我们团队真实遇到的网络故障,以及我整理的一套从命令行到在线工具的排查方法论。读完你应该能在下次"用户说慢但监控全绿"的时候,少走 80% 的弯路。

一、故事的开端

凌晨 3 点,企业微信报警群里炸开了锅:

"华南区用户反馈页面打不开,已经持续 20 分钟" "我这里测试是好的啊?" "我的也是好的" "但是用户截图是 502"

这是后端开发都熟悉的一种"鬼故事"——监控大盘一片绿,自己访问没问题,但用户就是说不行。

第一反应当然是登服务器:

$ ping www.example.com
PING www.example.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.
64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=53 time=12.3 ms
64 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=53 time=11.8 ms

延迟 12ms,丢包率 0%,看起来没毛病。

但这里有个最致命的认知陷阱:你在自己的机器(或者公司办公网)上 ping 通了,只能证明你这条线路是好的,证明不了广州联通的用户、深圳电信的用户、海外用户也是好的。

故障的本质是线路相关性,而单点检测无法发现线路相关性问题。

二、单点排障的天花板

我先把命令行工具能跑的都跑了一遍:

# 1. ICMP Ping
ping -c 100 www.example.com

# 2. TCP 端口探测
nc -zv www.example.com 443

# 3. HTTP 完整链路
curl -w "@curl-format.txt" -o /dev/null -s https://www.example.com

# 4. 路由追踪
mtr -rwc 50 www.example.com

# 5. DNS 解析
dig www.example.com +trace

其中 curl-format.txt 是我多年攒下来的格式化模板,强烈推荐放到家目录里:

     time_namelookup:  %{time_namelookup}s\n
        time_connect:  %{time_connect}s\n
     time_appconnect:  %{time_appconnect}s\n
    time_pretransfer:  %{time_pretransfer}s\n
       time_redirect:  %{time_redirect}s\n
  time_starttransfer:  %{time_starttransfer}s\n
                     ----------\n
          time_total:  %{time_total}s\n

跑完这一套,结果是:全 绿

但是用户还在反馈卡。

这种时候你会突然意识到:我的视角是错的。我需要的是"用户视角"——具体来说,是华南联通某个城市某个机房出口的视角。

三、多节点检测的必要性

互联网在不同 ISP 之间是"互联但不互通"的。所谓的国内三大运营商(电信、联通、移动)以及更细分的 CN2、CMI、9929、CMIN2 等线路,走的是完全不同的物理路径。一条 BGP 路由的抖动可能只影响某一组特定的 Source-Destination 组合。

举几个真实案例:

  • 联通用户访问电信服务器,绕一圈到香港再回来 → 个例延迟 200ms+
  • 移动用户访问某 CDN 节点,CMIN2 线路波动 → 局部丢包
  • 国内某 IDC 上联出口某个时段拥塞 → 仅该 IDC 的部分 IP 段受影响
  • DNS 在某个公共 DNS 上被错误劫持 → 仅使用该 DNS 的用户受影响

这些场景,坐在办公室里 ping 永远看不出来

你需要的是从 N 个节点(最好覆盖三大运营商各省份 + 海外)同时发起检测,对比延迟、丢包、路由路径的差异。

四、命令行 vs 在线检测工具,怎么选?

我整理了一张对比表(基于多年工作经验):

维度命令行 (ping/mtr/dig)在线多节点工具
检测视角单点(你的机器)多点(全国 + 海外)
部署成本需要服务器浏览器即可
自动化能力强(脚本/cron)弱(适合人工排查)
数据可视化强(地图、瀑布流)
路径差异对比困难一目了然
客户/老板沟通截图说不清截图直接交付

结论很简单:命令行做日常监控和自动化,在线工具做故障期间的快速定位。两者不是替代关系,是互补关系。

五、我常用的在线诊断工具

国内能用的多节点检测站点其实就那么几个,我现在主用 BiuPing(这也是这次故障最终帮我定位到问题的工具)。简单说几个我看重的点:

1. 节点覆盖

它聚合了全国电信/联通/移动的多个省份节点,以及海外节点。这次故障我就是用它的在线 Ping发现:广东、广西、福建三个联通节点丢包率都在 30% 以上,而其他省份正常——立刻锁定是华南联通方向出问题。

2. 不只是 ICMP Ping

很多服务器禁 Ping(出于安全考虑封了 ICMP),这时候普通 ping 工具会误报"目标不可达"。它的 TCPing 直接对 443/80/3306 等端口发 TCP SYN,完美绕开 ICMP 限制。我现在排查"服务器是不是真挂了"基本只用 TCPing。

3. 路径可视化

路由追踪会把每一跳的 IP、ASN、地理位置都画出来。这次我对比华南联通和华东联通的路径,发现华南联通走到 AS4837(联通骨干)某一跳就开始丢包,立刻就有了和上游 ISP 沟通的证据。

4. HTTP 完整瀑布流

网站测速能拆分出 DNS 解析、TCP 握手、SSL 握手、首字节、内容下载各个阶段的耗时。我之前定位过一个"网站偶发慢"的问题,瀑布流显示 SSL 握手耗时异常,最终查出是证书链配置缺了中间证书,导致部分客户端要回源校验。

5. DNS + IP 信誉

DNS 查询能看到不同地区的解析结果,识别 DNS 污染或 CDN 调度异常。IP 信誉对反垃圾邮件、风控场景很有用,能查 IP 是否在黑名单、是不是代理/VPN/Tor 出口。

完全免费,不用注册,对我这种"故障期间一秒都不想浪费"的场景非常友好。

当然,如果你是企业级监控,还是建议自建 Prometheus + Blackbox Exporter 那一套。在线工具更适合事后排查临时验证

六、回到那次故障

用 BiuPing 跑了一轮多节点检测,结果非常清晰:

节点              延迟       丢包率
广东·联通         超时        100%
广西·联通         158ms       45%
福建·联通         132ms       28%
广东·电信         32ms        0%
广东·移动         28ms        0%
北京·联通         48ms        0%
上海·联通         51ms        0%

定位结论:华南方向联通线路出口异常,与我们的服务器/应用本身无关

屏幕截图_7-5-2026_19241_www.biuping.com.jpeg

接下来动作:

  1. 截图发到运维群,证明不是应用层问题
  2. 联系 IDC 提工单,附上 traceroute 截图
  3. 在 CDN 控制台临时把华南联通用户调度到 BGP 多线节点
  4. 在客服话术里加一条"如果您是联通用户遇到访问问题,可以尝试切换 4G 网络"

整个过程从 3 点 20 排查开始,到 3 点 45 切完调度,故障感知期 25 分钟。

第二天联通方面回复:华南某骨干节点路由抖动,已经恢复。和我们的判断完全吻合。

七、一些可以直接抄走的方法论

7.1 故障排查的"由近及远"原则

应用日志 → 应用进程 → 操作系统 → 网卡/防火墙 →
本机网络 → 机房网络 → 运营商骨干 → 客户端网络

从离自己最近的开始查,但不要陷在某一层。如果一层查了 10 分钟没结果,就跳到下一层。

7.2 "对照组"思维

任何检测都要有对照:

  • 出问题的省份 vs 没问题的省份
  • 出问题的运营商 vs 没问题的运营商
  • 出问题的时间段 vs 平时
  • 出问题的用户 vs 其他用户

只有形成对照,你才能区分"系统问题"和"个例问题"。

7.3 网络抖动 ≠ 高延迟

很多人盯着平均延迟看,其实抖动(Jitter)才是用户体感的关键。平均 ping 30ms 但抖动 ±50ms 的网络,比平均 80ms 但稳定的网络体验差得多。游戏、视频会议、在线协作场景尤其明显。

排查抖动一定要用持续 Ping(至少 100 个包)而不是默认的 4 个包。

7.4 排查清单(可以收藏)

下次遇到"用户说慢"的时候,按这个顺序:

  1. ✅ 自己访问试试(建立基准)
  2. ✅ 多节点 Ping(看是否区域性故障)
  3. ✅ TCPing 业务端口(绕开 ICMP 干扰)
  4. ✅ HTTP 测速看瀑布流(定位是哪一阶段慢)
  5. ✅ Traceroute 对比正常/异常路径(定位故障跳)
  6. ✅ DNS 多地查询(排除 DNS 问题)
  7. ✅ 应用日志 + APM(最后回到应用层验证)

八、写在最后

做后端/运维这么多年,我越来越觉得:网络故障最怕的不是难,而是"看不见"

一个 SRE 的能力差距,往往不在于知道多少深奥原理,而在于能不能用对的工具,把"看不见的网络"变成"看得见的数据"

希望这篇排障复盘能帮到你。下次告警群再炸的时候,不要慌,泡杯咖啡,按照清单一项项排——大部分故障都没有想象中那么神秘。


互动一下:你遇到过最离奇的网络故障是什么?欢迎评论区交流,我会一一回复。

如果觉得文章对你有帮助,点个赞+收藏,下次找起来方便 🙏