sar -n DEV 显示网卡 errs/drop 持续上升,通常源于底层链路异常,需依次排查驱动兼容性(ethtool -i)、offload 配置冲突、物理链路问题(双工/速率/光衰)、硬件故障(dmesg/AER/PCIe)、系统资源瓶颈(softirq/backlog)。

sar -n DEV 显示 errs 或 drop 持续增加的网卡/驱动/硬件原因  第1张

sar -n DEV 显示某网卡的 errs(错误包)或 drop(丢包数)持续上升,通常不是单纯的应用层问题,而是底层链路存在异常。需结合网卡状态、驱动行为和硬件健康度综合排查。

网卡驱动不兼容或存在已知缺陷

老旧、定制或非主线内核驱动常在高吞吐、多队列或特定中断模式下触发报错逻辑,导致 errs 计数异常增长(如 CRC 错误误报、校验绕过失败),或因接收缓冲区管理缺陷引发 drop 上升。

  • 检查当前驱动版本:ethtool -i ethX,比对厂商发布的稳定版/补丁公告
  • 确认是否启用 NAPI、RSS、GRO/LRO 等特性,某些组合在特定驱动中会引发统计偏差或丢包(例如 LRO 与 checksum offload 冲突)
  • 临时禁用 offload 测试:ethtool -K ethX rx off tx off gso off tso off,观察 errs/drop 是否收敛

物理链路或端口协商异常

双工不匹配、速率降级、光纤衰减、RJ45 接触不良等,会导致大量 CRC/FCS 错误(计入 errs),或因 PHY 层无法可靠接收而直接丢弃帧(计入 drop)。

  • 运行 ethtool ethX 查看 SpeedDuplexLink detectedAuto-negotiation 状态,确认两端一致
  • 检查 ethtool -S ethX | grep -i "err\|drop\|over\|crc" 中更细粒度计数(如 rx_crc_errorsrx_over_errorsrx_fifo_errors),定位错误类型
  • 更换网线、交换机端口、SFP 模块,或使用光功率计检测光纤收发光是否在标称范围内

网卡硬件故障或资源耗尽

网卡 FIFO 溢出、DMA 故障、PCIe 链路不稳定(如 AER 错误)、板载缓存损坏等,会直接导致接收失败并计入 drop;部分故障还会伪造错误帧计入 errs

  • 查看内核日志:dmesg -T | grep -i "ethX\|pci\|aer\|fatal",关注 pcieportigb/ixgbe/i40e 等驱动报错
  • 检查 PCIe 链路状态:lspci -vv -s $(lspci | grep ethX | awk '{print $1}') | grep -A 10 "LnkSta",确认 SpeedWidth 稳定,无 Receiver ErrorBad TLP
  • 尝试将网卡换插到另一 PCIe 插槽,或更换同型号网卡交叉验证

系统资源瓶颈间接引发 drop

虽不直接增加 errs,但严重 CPU 不足、软中断(softirq)处理延迟、netdev backlog 溢出,会导致内核来不及从网卡 ring buffer 取包,最终调用 netif_receive_skb_core 前丢弃,计入 drop(尤其 rx_dropped)。

  • 监控软中断负载:cat /proc/softirqs | grep NET_RX,配合 top -H 观察 ksoftirqd/CPU 绑定情况
  • 检查 netdev backlog:ss -sreceiver 队列长度,或 netstat -s | grep -A 5 "Udp\|TcpExt" 查看 packet receive errors
  • 调整 net.core.netdev_max_backlog、绑定 IRQ 到专用 CPU、启用 RPS/RFS,缓解单核瓶颈