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

Linux网络丢包排查不能只盯着应用或配置,得从底层网卡和链路层开始逐层确认。真正有效的排查,是先看硬件是否“装得下”、驱动是否“来得及取”,再查有没有人为规则在中间截流。
看网卡统计:RX-OVR 和 RX-DRP 是关键指标
执行 netstat -i 查看各网卡收发统计:
- RX-OVR:Ring Buffer 溢出丢包。说明内核处理速度跟不上网卡收包速度,常见于高吞吐、低配机器或中断未均衡场景。
- RX-DRP:进入 Ring Buffer 后被丢弃,多因内存不足、软中断延迟高、NAPI 轮询不及时等内核处理瓶颈引起。
- RX-ERR:校验失败(如 CRC 错误)、帧格式异常,指向物理链路问题(线缆、光衰、端口协商失败)。
若 RX-OVR 非零,优先用 ethtool -g
查 tc 规则:QoS 丢包不会出现在网卡统计里
网卡清白 ≠ 没丢包。tc 配置的 netem、fq_codel、policer 等策略会直接丢包,且完全绕过 RX/TX 计数器。
- 运行 tc qdisc show dev
,重点看是否有 loss、limit、rate 或 burst 相关参数。 - 若发现类似
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 队列溢出丢包。
排除物理与驱动层干扰
别跳过最基础但最易出错的一环:










