首页/网络/网络排障速查/网卡环形缓冲与突发丢包(rx dropped)排查
连通性与链路检测54 条

网卡环形缓冲与突发丢包(rx dropped)排查

高转发场景下 rx dropped 增长往往是环形缓冲/中断处理问题,而非链路故障:调大 ring buffer、分散队列、检查软中断分布是标准处置。

网络排障速查网络更新于 2026-10-13

网卡环形缓冲与突发丢包是什么

高转发场景下 rx dropped 持续增长,很多时候不是链路故障,而是网卡环形缓冲(ring buffer)或中断处理跟不上:突发流量在缓冲填满后直接被丢弃,抓包看不到任何异常报文。处置方向是调大 ring 大小、合理分配多队列、检查软中断是否集中在少数 CPU 上,而不是去追查上游设备。

基本信息

适用平台Linux(ethtool、mpstat、/proc/interrupts)
查看命令ethtool -g、ethtool -S、ip -s link、mpstat -P ALL
关键区分ip -s link 的 dropped 与驱动级 rx_missed 或 no_buffers 含义不同
权限要求查看不需特殊权限,调 ring 与队列需 root

典型使用场景

  • 突发流量导致响应变慢:确认是否在网卡层就已经丢包
  • 万兆卡跑不满带宽:排查单队列与软中断集中问题
  • 容器密集部署的宿主机:多个 veth 抢占同一队列,出现间歇丢包
  • 虚拟化宿主:确认虚拟交换机与物理口的队列分配是否合理
  • 压测结果低于预期:先确认是应用瓶颈、队列瓶颈还是链路上限

查看与调整

查看与调整
# 查看当前 ring 大小(RX/TX)
ethtool -g eth0
# 调大到驱动支持的上限(需 root)
sudo ethtool -G eth0 rx 4096 tx 4096
# 查看并分配多队列
sudo ethtool -l eth0 | head; sudo ethtool -L eth0 combined 8
# 观察软中断分布与 CPU 饱和度
mpstat -P ALL 1 3
cat /proc/interrupts | grep eth0

丢包计数判读

计数含义处置方向
rx dropped(内核)协议栈之前丢弃查 ring、队列与驱动计数
rx_missed 或 no_buffers驱动视角的缓冲不足调大 ring,检查队列分配
tx dropped发送侧排队溢出查发送队列长度与拥塞控制
softnet 丢弃计数网络软中断预算耗尽分散中断、启用 RPS/RSS
调 ring 前先分清丢包类型:ip -s link 的 dropped 与 ethtool -S 输出的 rx_missed_errors、rx_no_buffer_count 不是同一口径,不同驱动命名也不同,要按语义而不是按名字判断。
临时调大的 ring 与队列配置要在重启后保留(写入网络配置或 systemd 服务):否则重启后失效,问题在下一个高峰期复现且无人记得改过什么。

易错点

  • 把突发丢包归咎于网络设备:实际是服务器网卡缓冲不足,整改方向完全错误
  • 临时调大 ring 未纳入配置管理:重启后失效,问题复发
  • 只看 ip -s link 的 dropped 就下结论:需结合驱动级计数区分内核栈与硬件层丢包
  • 忽略软中断分布:单核处理所有中断时,调大 ring 也无法解决突发丢包
  • 在容器环境只调宿主机参数:容器网络路径中的 veth 与网桥同样影响队列分配

数据来源与参考

  • ethtool 手册(-g/-G/-l/-L)
  • Linux 网络性能调优实践(RPS/RSS/ring)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌