11

我从 Broadcom 网卡中获得了数千个丢弃的包:

eth1      Link encap:Ethernet  HWaddr 01:27:B0:14:DA:FE
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:2746252626 errors:0 dropped:1151734 overruns:0 frame:0
          TX packets:4109502155 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:427998700000 (408171.3 Mb)  TX bytes:3530782240047 (3367216.3 Mb)
          Interrupt:40 Memory:d8000000-d8012700

这是安装的版本:

filename:       /lib/modules/2.6.27.54-0.2-default/kernel/drivers/net/bnx2.ko
version:        1.8.0
license:        GPL
description:    Broadcom NetXtreme II BCM5706/5708/5709 Driver

这些数据包每小时数次以 500 到 5000 个数据包的数量批量丢弃。服务器(运行 Postgres)运行良好 - 只是 dropps 很烦人。

在尝试了很多不同的事情之后,我问:我怎样才能知道数据包来自哪里以及为什么会被丢弃?

4

3 回答 3

12

丢弃的数据包意味着用于存储数据包以进行转发/处理的缓冲区已满。查看数据包的数据以获取信息的行为意味着您首先拥有要查看的数据(您没有,因为没有空间存储它)。

解决此问题的一个好方法是查看流量转储,以查看离开服务器的 TCP 重新传输请求,以便您可以查看正在丢弃哪些数据。当 TCP 数据包丢失时,无论出于何种原因,您的服务器都会要求重新发送它。重新传输将为您提供您正在寻找的对话上下文。

我实际上建议查看您的服务器连接到的交换机/路由器。它将能够让您很好地了解服务器接口上的损耗和吞吐量,让您诊断,例如,如果您的卡对于线路来说太慢了。

编辑

这篇博文引用了一个名为 的工具dropwatch,它也可以为您提供一些线索。

于 2012-01-25T20:47:22.660 回答
8

您可能会遇到https://www.novell.com/support/kb/doc.php?id=7007165

引用:

从内核 2.6.37 开始,已更改丢弃数据包计数的含义。以前,丢弃的数据包很可能是由于错误造成的。现在, rx_dropped 计数器显示丢帧的统计信息,因为:

Softnet backlog full --(从 /proc/net/softnet_stat 测量)

错误/意外的 VLAN 标记

未知/未注册协议

服务器未配置 IPv6 时的 IPv6 帧

如果任何帧满足这些条件,它们会在协议栈之前被丢弃,并且 rx_dropped 计数器会增加。

于 2015-06-08T07:48:31.960 回答
4

(为了那些通过搜索找到这个问题的人的利益)我看到了同样的问题(也有一个 bnx2 模块,IIRC)。

您可以尝试关闭 irqbalance 服务。就我而言,它完全停止了解决方案。

另请注意,不久前,irqbalance 有很多更新(RHEL 6)。还应检查主系统和以太网板的固件更新。

我们看到这只是一个非常大的子网,具有非常大量的广播/多播活动。我们没有在同一设备上的噪音较小但仍然非常活跃的网络部分看到这一点。

潜在地,也可以使用为 NIC 设置以太网环形缓冲区大小。我知道在那个繁忙的网络上 sysctl 有一些变化......

于 2014-03-28T10:28:17.757 回答