最近業(yè)務上老有問題,查看發(fā)現(xiàn)overruns值不斷增加,學習了一下相關的知識。 發(fā)現(xiàn)數(shù)值也在不停的增加。G 了一下,發(fā)現(xiàn)這些 errors, dropped, overruns 表示的含義還不大一樣。 eth2 Link encap:Ethernet HWaddr 00:8C:FA:F1:DA:78 inet addr:10.249.2.112 Bcast:10.249.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:26191508237 errors:0 dropped:0 overruns:45732243 frame:0 TX packets:20141298524 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4684832167216 (4.2 TiB) TX bytes:4670328443919 (4.2 TiB) Memory:c7200000-c7280000 RX errors: 表示總的收包的錯誤數(shù)量,這包括 too-long-frames 錯誤,Ring Buffer 溢出錯誤,crc 校驗錯誤,幀同步錯誤,fifo overruns 以及 missed pkg 等等。 RX dropped: 表示數(shù)據包已經進入了 Ring Buffer,但是由于內存不夠等系統(tǒng)原因,導致在拷貝到內存的過程中被丟棄。 RX overruns: 表示了 fifo 的 overruns,這是由于 Ring Buffer(aka Driver Queue) 傳輸?shù)?IO 大于 kernel 能夠處理的 IO 導致的,而 Ring Buffer 則是指在發(fā)起 IRQ 請求之前的那塊 buffer。很明顯,overruns 的增大意味著數(shù)據包沒到 Ring Buffer 就被網卡物理層給丟棄了,而 CPU 無法即使的處理中斷是造成 Ring Buffer 滿的原因之一,上面那臺有問題的機器就是因為 interruprs 分布的不均勻(都壓在 core0),沒有做 affinity 而造成的丟包。 RX frame: 表示 misaligned 的 frames。 1、先查看硬件情況 一臺機器經常收到丟包的報警,先看看最底層的有沒有問題: ethtool eth2 | egrep 'Speed|Duplex'Speed: 1000Mb/sDuplex: Full ethtool -S eth2 | grep crcrx_crc_errors: 0Speed, Duplex, CRC 之類的都沒問題,基本可以排除物理層面的干擾。 2、通過 ifconfig 可以看到 overruns 字段在不停的增大 for i in seq 1 100; do ifconfig eth2 | grep RX | grep overruns; sleep 1; done 這里一直增加 RX packets:26191785302 errors:0 dropped:0 overruns:45732243 frame:0 3、查看buffer大小 找了一些國外的文章,可以通過ethtool來修改網卡的buffer size ,首先要網卡支持,我的服務器是是INTEL 的1000M網卡,我們看看ethtool說明。 -g –show-ringQueries the specified ethernet device for rx/tx ring parameter information. 查看當前網卡的buffer size情況ethtool -g eth0 Ring parameters for eth0: Pre-set maximums: RX: 4096RX Mini: 0 RX Jumbo: 0 TX: 4096 Current hardware settings: RX: 256 RX Mini: 0 RX Jumbo: 0 TX: 256 4、修改buffer size大小 ethtool -G eth2 rx 2048 ethtool -G eth2 tx 2048 查看丟包 [root@appserver1 network-scripts]# cat /proc/net/dev | column -t Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:1697064305645 4937104295 0 0 0 0 0 0 1697064305645 4937104295 0 0 0 0 0 0 eth0:72829268758 343814516 0 21338 0 0 0 9764241 74743576507 418943369 0 0 0 0 0 0 eth1:5826509023 48719872 0 0 0 0 0 11358883 127451707 1107964 0 0 0 0 0 0 eth2:4684766978372 26191366713 0 0 45732243 0 0 278436828 4670300836866 20141168183 0 0 0 0 0 0 eth3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 bond0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [root@appserver1 network-scripts]# netstat -i | column -t Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth2 1500 0 26191244868 0 0 45732243 20141056331 0 0 0 BMRU lo 16436 0 4937053994 0 0 0 4937053994 0 0 0 LRU 問題:接受隊列溢出產生錯誤,當?shù)诌_的包多于內核可以處理的包時,計算機會產生漫溢(overruns)。輸入隊列達到其上限(max_backlog)時,多抵達的那些包會全部被丟棄掉。 補充一下, 對于overrun的包,修改了ring buffer之后,重啟主機后會失效,1,需要將配置添加到網卡配置文件例如 rhel系列是在/etc/sysconfig/network-scripts/ifcfg-* , 例如網卡是enp3, 在 ifcfg-enp3 配置文件添加 'ETHTOOL_OPTS='-G ${DEVICE} rx 4096; -A ${DEVICE} autoneg on' 2,如果網卡配置ETHTOOL_OPTS 參數(shù)不生效,請確保initscripts 這個軟件包是最新版本. |
|