|
最近業(yè)務(wù)上老有問題,查看發(fā)現(xiàn)overruns值不斷增加,學(xué)習(xí)了一下相關(guān)的知識。 發(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: 表示總的收包的錯(cuò)誤數(shù)量,這包括 too-long-frames 錯(cuò)誤,Ring Buffer 溢出錯(cuò)誤,crc 校驗(yàn)錯(cuò)誤,幀同步錯(cuò)誤,fifo overruns 以及 missed pkg 等等。 RX dropped: 表示數(shù)據(jù)包已經(jīng)進(jìn)入了 Ring Buffer,但是由于內(nèi)存不夠等系統(tǒng)原因,導(dǎo)致在拷貝到內(nèi)存的過程中被丟棄。 RX overruns: 表示了 fifo 的 overruns,這是由于 Ring Buffer(aka Driver Queue) 傳輸?shù)?IO 大于 kernel 能夠處理的 IO 導(dǎo)致的,而 Ring Buffer 則是指在發(fā)起 IRQ 請求之前的那塊 buffer。很明顯,overruns 的增大意味著數(shù)據(jù)包沒到 Ring Buffer 就被網(wǎng)卡物理層給丟棄了,而 CPU 無法即使的處理中斷是造成 Ring Buffer 滿的原因之一,上面那臺有問題的機(jī)器就是因?yàn)?interruprs 分布的不均勻(都壓在 core0),沒有做 affinity 而造成的丟包。 RX frame: 表示 misaligned 的 frames。 1、先查看硬件情況 一臺機(jī)器經(jīng)常收到丟包的報(bào)警,先看看最底層的有沒有問題: 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來修改網(wǎng)卡的buffer size ,首先要網(wǎng)卡支持,我的服務(wù)器是是INTEL 的1000M網(wǎng)卡,我們看看ethtool說明。 -g –show-ringQueries the specified ethernet device for rx/tx ring parameter information. 查看當(dāng)前網(wǎng)卡的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 問題:接受隊(duì)列溢出產(chǎn)生錯(cuò)誤,當(dāng)?shù)诌_(dá)的包多于內(nèi)核可以處理的包時(shí),計(jì)算機(jī)會產(chǎn)生漫溢(overruns)。輸入隊(duì)列達(dá)到其上限(max_backlog)時(shí),多抵達(dá)的那些包會全部被丟棄掉。 補(bǔ)充一下, 對于overrun的包,修改了ring buffer之后,重啟主機(jī)后會失效,1,需要將配置添加到網(wǎng)卡配置文件例如 rhel系列是在/etc/sysconfig/network-scripts/ifcfg-* , 例如網(wǎng)卡是enp3, 在 ifcfg-enp3 配置文件添加 'ETHTOOL_OPTS='-G ${DEVICE} rx 4096; -A ${DEVICE} autoneg on' 2,如果網(wǎng)卡配置ETHTOOL_OPTS 參數(shù)不生效,請確保initscripts 這個(gè)軟件包是最新版本. |
|
|