rx_missed_errors增加表明网卡接收路径来不及处理数据帧导致丢包,主因是ring buffer溢出、中断响应延迟或驱动处理能力不足,硬件故障较少见。

rx_missed_errors 增加说明网卡丢包,但不一定是硬件故障
这个计数器上升,代表内核已确认数据帧到达了网卡,但未能被上层协议栈(如网络栈或驱动)及时处理而丢失。它和 rx_dropped(可能由 XDP、tc 或内存分配失败引起)不同,rx_missed_errors 更偏向底层接收路径的“来不及收”。常见原因集中在 ring buffer 溢出、中断响应延迟、驱动处理能力不足三者,硬件故障反而是少数情况。
检查 ring buffer 大小是否过小(最常见原因)
当网卡 FIFO 或驱动 ring buffer 满了,新到的数据帧会被直接丢弃,并计入 rx_missed_errors。尤其在突发流量下极易触发。
- 查看当前设置:
ethtool -g eth0,重点关注rx的Current值(单位:frames) - 尝试增大(需支持):
ethtool -G eth0 rx 4096(常见上限为 2048/4096/8192,具体看网卡型号) - 注意:部分网卡(如某些 Realtek 或老旧 Intel)不支持动态调大;增大后需观察
ethtool -S eth0中rx_fifo_errors是否同步下降 - 增大 ring buffer 会占用更多 DMA 内存,对低内存设备需权衡
确认中断合并(Interrupt Coalescing)是否过度激进
启用中断合并可降低 CPU 开销,但若延迟过高或包阈值过大,会导致 ring buffer 在两次中断之间就填满,引发丢包。
- 查看配置:
ethtool -c eth0,关注rx-usecs(微秒级延迟)、rx-frames(触发中断所需帧数) - 典型问题配置:
rx-usecs 500+rx-frames 64→ 在高吞吐下容易溢出 - 保守调优建议:
ethtool -C eth0 rx-usecs 50 rx-frames 32(先试,再逐步放宽) - 某些驱动(如
igb、ixgbe)对中断合并更敏感,而mlx5等现代驱动通常默认较合理
排查驱动与固件兼容性及 CPU 绑定瓶颈
即使 ring buffer 和中断设置合理,rx_missed_errors 仍增长,大概率是驱动无法及时从 ring 中取包,根源常是 CPU 资源争抢或驱动缺陷。
- 用
cat /proc/interrupts | grep eth0查看中断是否集中在一个 CPU 上;若该 CPU %sy 长期 >70%,考虑用irqbalance或手动绑核(echo 2 > /proc/irq/*/smp_affinity_list) - 检查驱动版本:
ethtool -i eth0→ 对比厂商推荐固件(fw_version)和驱动(driver)是否匹配,老驱动对新固件支持不佳很常见 - 临时排除驱动问题:尝试加载带
noirqdebug或disable_msi=1参数的驱动(仅调试用),观察计数器是否停止上涨 - 某些网卡(如部分 Broadcom BCM57xx)在 LRO/GRO 启用时会加剧 ring 压力,可试
ethtool -K eth0 gro off lro off
真正难定位的是多个因素叠加:比如 ring buffer 刚好卡在临界值、中断合并参数偏保守、又碰上某个 CPU 被其他进程打满。这时候单看 rx_missed_errors 数值没意义,必须同步抓 /proc/interrupts、mpstat -P ALL 1、ethtool -S eth0 的 delta,并复现流量模式。别急着换硬件——90% 的 case 调整 ethtool -G 和 -C 就能压住。











