2012-01-24 50 views
10

我收到數千下降包從博通網卡:如何找到哪些數據包丟棄得到

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

(對於那些通過搜索來到這裏)我已經看到了同樣的問題(也與一個bnx2模塊,IIRC)。

您可以嘗試關閉irqbalance服務。就我而言,它完全停止瞭解決方案。

請注意,不久之前,irqbalance有很多更新(RHEL 6)。還應該檢查主系統和以太網板的固件更新。

我們看到這只是一個非常大的子網,具有非常大量的廣播/多播活動。我們在同一臺設備上沒有看到這種噪音 - 但仍然非常活躍 - 是網絡的一部分。

也可能使用設置NIC的以太網環形緩衝區大小。我知道這個繁忙網絡上的sysctl有一些改動...

11

丟棄的數據包表示用於存儲轉發/處理數據包的緩衝區已滿。查看包的數據以獲取信息的行爲意味着您首先需要查看數據(您不知道,因爲沒有空間來存儲它)。

一個很好的解決方法,所以你可以看到什麼數據被丟棄,是通過你的流量轉儲來查看TCP重新傳輸請求離開你的服務器。當TCP數據包丟失時,無論出於何種原因,您的服務器將要求重新發送。重發會給你你正在尋找的對話上下文。

我真的建議看看你的服務器連接到的交換機/路由器。它將能夠給你一個關於服務器接口損耗和吞吐量的好主意,讓你診斷,例如,如果你的網卡對於電線來說太慢了。

編輯

This blog post舉了一個叫dropwatch工具,它可以給你一些線索,以及。

+1

值得指出的是,在撰寫本文時沒有可用的Ubuntu版本 - dropwatch被維護並提供給fedora/redhat .. – rasjani

+1

,即使如此,我從未發現它非常有用(或在最小可用) –

+0

如果您確實需要dropwatch,您會發現您的架構的rpm,並將其轉換爲具有'alien'的deb文件。 –

7

你可能碰到了https://www.novell.com/support/kb/doc.php?id=7007165

報價:

內核2.6.37開始,它已經改變丟棄的數據包數量的含義。之前,丟棄數據包很可能是由於錯誤。現在,rx_dropped計數器顯示由於丟幀統計:

Softnet的積壓滿 - (測量從/ proc /網/ softnet_stat)

壞/無意VLAN標籤

未知/未註冊協議

當服務器沒有針對IPv6配置

如果任何幀滿足這些條件的,則協議棧之前丟棄,rx_dropped計數器遞增

IPv6的幀。