如何找到丢弃的数据包

时间:2012-01-24 13:50:28

标签: linux networking broadcom

我从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很烦人。

在尝试了很多不同的事情之后,我问:我怎样才能找到数据包的来源以及它们为什么被丢弃?

3 个答案:

答案 0 :(得分:12)

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

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

我实际上建议您查看服务器所连接的交换机/路由器。它可以让您很好地了解服务器接口的损耗和吞吐量,让您诊断,例如,您的卡是否太慢,无法接通电线。

修改

This blog post引用了一个名为dropwatch的工具,它也可以为您提供一些线索。

答案 1 :(得分: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计数器递增。

答案 2 :(得分:4)

(为了那些通过搜索得到的人的利益)我已经看到了同样的问题(也使用了bnx2模块,IIRC)。

您可以尝试关闭irqbalance服务。在我的情况下,它完全停止了解决方案。

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

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

可能也可以使用设置NIC的以太网环缓冲区大小。我知道在繁忙的网络上有一些sysctl的改动......