首页/网络/网络排障速查/链路抖动(Flapping)排查:dmesg 与 carrier 计数
连通性与链路检测54 条

链路抖动(Flapping)排查:dmesg 与 carrier 计数

接口 up/down 反复跳变会导致上层协议震荡、业务间歇中断;数一数内核日志里的 Link Down 事件与 carrier_changes 计数就能确认。

网络排障速查网络更新于 2026-10-13

链路抖动的表现与确认

接口反复 up/down 会让上层协议持续震荡:路由重新收敛、会话中断、业务间歇性不可用。确认方法很直接:数内核日志里的 Link Down 事件数量,并读取接口的 carrier_changes 计数——后者是累计值,所以在业务故障前后各读一次,比较增量就能确认抖动是否发生在故障窗口内,而不是历史遗留。

基本信息

适用平台Linux(dmesg 与 /sys/class/net 均为内核自带)
关键计数/sys/class/net/<接口>/carrier_changes(载波变化累计次数)
日志来源dmesg -T 中的 link is down / link is up 事件
辅助命令ethtool <接口> 看协商速率与双工;ethtool -S 看错误细分
权限要求读计数普通用户可做,查看完整 dmesg 可能需权限

典型使用场景

  • 业务间歇中断但抓不到丢包:先排除接口抖动这个更底层的可能
  • 机房搬迁或换线后验证:复核计数是否停止增长,确认修复有效
  • 判断光模块或网线质量:结合 CRC 错误与 downshift 事件一起看
  • 节能以太网(EEE)协商异常导致的对端省电跳变:优先在链路抖动排查中考虑
  • 长期巡检:把 carrier_changes 纳入监控,增长速率异常即告警

确认抖动频率

确认抖动频率
dmesg -T | grep -iE 'link is (down|up)|nic link' | tail -30   # 最近的链路事件
dmesg -T | grep -ci 'link is down'                          # 累计 down 次数
cat /sys/class/net/eth0/carrier_changes                       # 载波变化累计计数
ethtool eth0 | grep -E 'Speed|Duplex|Link detected'           # 当前协商结果
ethtool -S eth0 | grep -iE 'carrier|downshift'                # 是否有降速或载波异常
# 修复后复核:间隔一段时间再读一次,计数不再增长才算真的解决
cat /sys/class/net/eth0/carrier_changes

现象与常见成因

现象可能成因验证方式
计数持续增长且业务同时中断线缆或接口物理问题换线换端口后复核计数
伴随 CRC 错误增长网线质量、水晶头氧化、光衰结合 ip -s -s 的错误细分
只在业务繁忙时段抖动电源不稳、端口供电或温度对比负载曲线与抖动时间点
协商速率反复变化双工或速率不匹配、EEE 协商ethtool 查看速度与双工历史
对端设备侧也记录到抖动对端端口或模块故障两端同时读计数对比
常见成因清单:水晶头氧化或线序不良、光模块接触不良、电源不稳、对端设备端口故障、节能以太网(EEE)协商问题。逐项排除比反复重启接口更有效。

易错点

  • 只看 dmesg 最近几行就下结论:必须统计总量并在业务故障时间窗内做增量对比,否则会把历史事件当成当前故障
  • 更换网线后不复核计数:不做修复后的增量验证,误以为已解决,故障几天后再次出现
  • 把抖动当上层协议问题:在路由与防火墙配置上反复修改,真正的物理层问题始终没被发现
  • 忽略协商速率变化:只看链路是否 up,不看速度与双工是否降级,性能问题被漏掉

数据来源与参考

  • Linux 内核日志(netdev linkwatch)
  • ethtool 手册(carrier/speed 输出)

相关工具

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