Linux网卡丢包需分层定位:先查/proc/net/dev的Rx-OVR(Ring Buffer溢出)和Rx-DRP(内核丢包),再用ethtool -S分析rx_over_errors、rx_fifo_errors、rx_missed_errors、rx_dropped等驱动级指标,同时排查tc/qdisc人为丢包、软中断压力、conntrack耗尽及防火墙规则。

看 /proc/net/dev 的 Rx-OVR 和 Rx-DRP 列
这是最轻量、最稳定的第一入口,不依赖任何额外工具,所有 Linux 内核版本都支持。直接执行 cat /proc/net/dev,找到目标网卡(如 eth0)那一行,重点关注最后两列:Rx-OVR 和 Rx-DRP。
-
Rx-OVR > 0:Ring Buffer 溢出,包还没进内存就被网卡硬件丢弃——tcpdump -i eth0抓不到这些包 -
Rx-DRP > 0且Rx-OVR == 0:包已进 Ring Buffer,但在内核协议栈处理阶段被丢弃 - 虚拟网卡(如
virtio_net)可能不暴露Rx-OVR,此时若Rx-DRP上涨 +dmesg | grep -i "missed"有输出,基本锁定 vCPU 调度延迟
用 ethtool -S 查驱动级真实丢包字段
/proc/net/dev 是通用统计,而 ethtool -S eth0 输出的是驱动原生计数器,字段更准、分层更细。别用 grep -i drop——它会漏掉关键指标,也会把重传、过滤等伪丢包当真问题。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
rx_over_errors:对应Rx-OVR,确认 Ring Buffer 溢出是否属实 -
rx_fifo_errors:物理 FIFO 缓冲区满,多见于小包高吞吐场景,常与rx_over_errors同步上升 -
rx_missed_errors:虚拟化环境关键信号,vCPU 调度不及时导致中断丢失,值上升即说明宿主机 CPU 过载或 vCPU 绑定不合理 -
rx_dropped:包已入 Ring Buffer,但被内核协议栈丢弃,常见于net.core.netdev_max_backlog不足或软中断负载过高
检查 tc/qdisc 是否在静默丢包
tc 规则造成的丢包完全不会出现在网卡统计里,是生产环境最常被误判的“幽灵丢包”。网卡清白,但流量就是少了一截。
- 运行
tc qdisc show dev eth0,重点找含netem、loss、policer、fq_codel的规则 - 加
-s参数看真实丢包数:tc -s qdisc show dev eth0,关注输出中dropped列是否持续增长 - 容器环境要扩展排查范围:
CNI插件(如 Calico、Cilium)常在cali+或lxc+虚拟接口上挂 tc 规则,不能只查eth0
排除 conntrack 满和防火墙静默拦截
很多“丢包”其实是被静默拦截或资源耗尽导致,没有日志、不发 RST、客户端只能超时,极难察觉。
- 查 conntrack 表是否溢出:
conntrack -S,若insert_failed持续上升,说明新建连接因表满被丢弃 - 检查 iptables/nftables 规则:
iptables -L -n -v | grep DROP,特别注意 INPUT 链中是否有无意识的REJECT/DROP规则 - 临时禁用测试:
iptables -F(测试后务必恢复),或systemctl stop firewalld
tc 规则和 conntrack insert_failed 这两类丢包,既不写日志,也不进 /proc/net/dev,必须主动去查。

















