Linux网络丢包怎么排查_链路与网卡分析方法【教程】

12次阅读

Linux 网络丢包需逐层排查:先查网卡 RX-OVR(Ring Buffer 溢出)、RX-DRP(内核处理丢包)、RX-ERR(物理链路问题),再检查 tc 规则、软中断分布、Ring Buffer 设置及物理连接与驱动状态。

Linux 网络丢包怎么排查_链路与网卡分析方法【教程】

Linux 网络丢包排查不能只盯着应用或配置,得从底层网卡和链路层开始逐层确认。真正有效的排查,是先看硬件是否“装得下”、驱动是否“来得及取”,再查有没有人为规则在中间截流。

看网卡统计:RX-OVR 和 RX-DRP 是关键指标

执行 netstat -i 查看各网卡收发统计:

  • RX-OVR:Ring Buffer 溢出丢包。说明内核处理速度跟不上网卡收包速度,常见于高吞吐、低配机器或中断未均衡场景。
  • RX-DRP:进入 Ring Buffer 后被丢弃,多因内存不足、软中断延迟高、NAPI 轮询不及时等内核处理瓶颈引起。
  • RX-ERR:校验失败(如 CRC 错误)、帧格式异常,指向物理链路问题(线缆、光衰、端口 协商失败)。

若 RX-OVR 非零,优先用 ethtool -g 查当前 Ring Buffer 大小,并考虑调大(如 ethtool -G rx 4096);若 RX-ERR 高,检查 ethtool 中的 link status、speed/duplex、fec 状态,确认物理连接稳定。

查 tc 规则:QoS 丢包不会出现在网卡统计里

网卡清白 ≠ 没丢包。tc 配置的 netem、fq_codel、policer 等策略会直接丢包,且完全绕过 RX/TX 计数器。

  • 运行 tc qdisc show dev ,重点看是否有 losslimitrateburst 相关参数。
  • 若发现类似 qdisc netem …… loss 5%,说明这是人为注入丢包,用于测试或限流——生产环境应禁用。
  • 清除规则:tc qdisc del dev root(慎用,确保无依赖)。

盯住 Ring Buffer 和中断:软中断瓶颈常被忽略

即使 RX-OVR 为 0,也可能是 Ring Buffer 设置偏小 + CPU 负载高导致消费滞后。进一步验证:

  • cat /proc/interrupts | grep 观察对应网卡中断是否集中在单个 CPU 上;若某 CPU 的 softirq(SI)持续高于 70%,说明 NAPI 处理不过来。
  • 启用 RPS/RFS:echo f > /sys/class/net//queues/rx-0/rps_cpus(按需调整掩码),把软中断分散到多核。
  • 检查 /proc/net/softnet_stat 第 1 列(processed)与第 2 列(dropped)比值;第 2 列持续增长,表明 softnet 队列溢出丢包。

排除物理与驱动层干扰

别跳过最基础但最易出错的一环:

  • ethtool 确认 link detected yes、speed 匹配对端、duplex full;若显示 auto-negotiation failed,手动协商或换线缆。
  • 检查 dmesg | grep -i “eth|nic|firmware” 是否有驱动报错、DMA timeout、firmware crash 等日志。
  • 更新网卡固件和驱动版本,尤其 Mellanox、Intel X710 等常见企业级网卡,旧版驱动存在已知 Ring Buffer 竞态丢包问题。
星耀云
版权声明:本站原创文章,由 星耀云 2025-12-29发表,共计1286字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources