KKCE: Ping检测 100%丢包?先别重启服务器
凌晨一点,手机震了。钉钉告警:「xx.xxx.xxx.xxx Ping 检测 100% 丢包,持续 5 分钟。」
我第一反应:机器 OOM 了?机房割接?赶紧翻起床开电脑。
登云控制台,VNC 连上去——机器活着,CPU 12%,内存还剩 6 个 G,Nginx 进程跑得好好的。再一看,同段其他机器也全绿。
这时候如果你跟我以前一样,第一反应是「重启试试」,那恭喜你,白折腾一次还背个变更记录。
Ping 检测 100% 丢包 ≠ 服务器宕机。 这是运维排障里最容易被误读的信号之一。
一、先搞清楚:Ping 检测到底在测什么
Ping 用的是 ICMP 协议(Internet Control Message Protocol),本质是操作系统内核的网络层探测包。它做的事只有一件:
从 A 主机发一个 echo request 到 B 主机,B 主机回一个 echo reply。
它测的是:
- 目标 IP 是否在线(三层网络可达)
- 往返延迟多少
- 有没有丢包
它测不了的:
- 端口开没开(80/443 通不通)
- 防火墙是不是拦了业务流量
- Nginx/Apache 是不是挂了
- SSL 证书有没有问题
- DNS 解析对不对
- 应用层有没有报错
所以"Ping 检测 100% 丢包"的准确翻译是:检测节点到目标 IP 的 ICMP 包全部没收到回包。 至于上面跑的网站服务正不正常,ICMP 完全不知道。
二、Ping 检测 100% 丢包的七种真实原因
原因 1:防火墙/安全组禁了 ICMP
这是最常见的。很多运维为了安全,安全组里直接 drop 所有 ICMP。结果 Ping 全丢,但 80/443 正常服务。
原因 2:运营商链路抖动
骨干网割接、光缆被挖、路由震荡——这些都会导致某个运营商到目标 IP 的链路中断。但其他运营商可能正常。
原因 3:目标服务器 ICMP 速率限制
Linux 默认有 net.ipv4.icmp_ratelimit,高并发 Ping 会被内核限速丢包。不是不通,是回包被限了。
原因 4:中间路由设备丢 ICMP
有些运营商的路由器对 ICMP 优先级最低,拥塞时优先丢 ICMP 包保 TCP 流量。你 Ping 丢包,但用户访问正常。
原因 5:目标 IP 被黑洞路由
DDoS 防护触发黑洞,所有流量(包括 ICMP)被丢弃。这是唯一一种"真的不可达",但 TCP 也一样不通。
原因 6:源检测节点自身问题
KKCE 的某个拨测节点本身网络异常,从该节点发出的 Ping 全丢。换几个节点测就知道。
原因 7:服务器真的挂了
最后才考虑这个。如果所有节点、所有协议全不通,那大概率是真挂了。
三、用 KKCE Ping 检测分运营商验证
KKCE 的 Ping 检测 支持按电信/移动/联通/海外分节点测试。100% 丢包时第一步不是重启,是看丢包是不是分运营商的。
操作:
- 打开 KKCE Ping 检测
- 输入 IP 或域名
- 分别选电信、移动、联通、海外节点
- 对比结果
判读:
- 某运营商丢包、其他正常 → 链路/路由问题,不是机器问题
- 全运营商丢包 → 继续用 TCPing 验证端口
- 仅个别节点丢包 → 该节点自身异常,忽略
四、交叉验证:别让 ICMP 骗了你
Ping 检测 100% 丢包后,立刻做三步交叉验证:
第一步:TCPing 打业务端口
用 KKCE TCPing 检测 打 80/443/22。如果 Ping 丢包但 TCPing 通,说明机器活着、服务正常,只是 ICMP 被拦了。这是最好的结果。
第二步:网站测速看应用层
用 网站测速 发真实 HTTPS 请求。能返回 200 就证明业务完全没问题。
第三步:MTR 看路由路径
用 MTR 路由去程 追踪,看哪一跳开始丢包。如果是最后一跳丢,可能是目标禁 ICMP;如果是中间某跳开始丢,是链路问题。
五、实战复盘:凌晨告警的真相
回到开头那个凌晨告警。我的排查过程:
- Ping 检测:广东移动节点 100% 丢包,北京电信 0% 丢包
- TCPing 443:广东移动节点连接成功,延迟 42ms
- 网站测速:广东移动 HTTPS 返回 200,TTFB 180ms
- MTR 路由去程:第 9 跳开始 ICMP 丢包,但 TCP 正常
结论:广东移动到该机房的链路在某一跳路由设备对 ICMP 做了限速/丢弃,TCP 流量完全不受影响。业务零影响。
处理:没做任何变更。在监控里把 Ping 告警的触发条件从"1 次丢包"改成"连续 3 次丢包 + TCPing 也失败"才告警。误报率直接降到零。
六、监控配置建议:别被误报吵醒
Ping 检测作为监控手段没问题,但告警阈值要合理:
| 场景 | 建议配置 |
|---|---|
| 普通业务 | 连续 3 次丢包 + TCPing 443 失败才告警 |
| 核心接口 | Ping 丢包 + HTTP 状态码非 200 双条件 |
| DDoS 防护期 | 临时关闭 Ping 告警(黑洞期间必丢) |
| 禁 ICMP 的机器 | 用 TCPing 监控替代 Ping |
KKCE 的 Ping 监控 和 TCPing 检测 可以组合使用,避免单一协议误报。
七、什么时候 100% 丢包才是真告警
必须满足以下条件之一才需要立刻处理:
- 所有运营商 Ping 全丢 + TCPing 全失败
- Ping 丢包 + 网站测速返回 5xx/超时
- 丢包率从 0% 突然跳到 100% 且持续超过 5 分钟
- 多台同段机器同时丢包(可能是交换机/上联故障)
以下情况可以忽略或降级告警:
- 单运营商丢包,TCPing 正常
- 个别节点丢包,其他节点正常
- 丢包率波动但业务响应正常
- 已知禁 ICMP 的机器
八、排障口诀
Ping 丢包,先分运营商看
TCPing 通,机器就没挂
网站测速 200,业务就正常
全协议全节点都不通,再重启不迟
覆盖全球3000+节点、支持 IPv4/IPv6 双栈与多运营商对照,排障不用切平台,就在 www.kkce.com 一次跑完。
-快快测