前言
今天發(fā)現有一個(gè)數據延遲的很厲害,通過(guò)日志查看,日志2G的日志傳輸了半個(gè)小時(shí)的時(shí)間,導致最后分析延遲。是什么原因呢?
分析原因
通過(guò)日志可以查看到rsync日志同步的速度比平時(shí)慢了9倍。通過(guò)zabbix監控看到網(wǎng)絡(luò )雖然比較繁忙,但是還沒(méi)有達到瓶頸。所以猜測:丟包了。!
ifconfig可以查看到一些網(wǎng)卡信息的匯總:
- # ifconfig em2
- em2 Link encap:Ethernet HWaddr AC:85:3D:A9:03:0D
- inet addr:1.1.1.33 Bcast:1.1.1.255 Mask:255.255.255.0
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:17141208886 errors:164254181 dropped:0 overruns:0 frame:0
- TX packets:14685534428 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:2619578349554 (2.3 TiB) TX bytes:1479317006067 (1.3 TiB)
- Memory:94b00000-94b20000
RX errors: 表示總的收包的錯誤數量,這包括 too-long-frames 錯誤,Ring Buffer 溢出錯誤,crc 校驗錯誤,幀同步錯誤,fifo overruns 以及 missed pkg 等等。
RX dropped: 表示數據包已經(jīng)進(jìn)入了 Ring Buffer,但是由于內存不夠等系統原因,導致在拷貝到內存的過(guò)程中被丟棄。
RX overruns: 表示了 fifo 的 overruns,這是由于 Ring Buffer(aka Driver Queue) 傳輸的 IO 大于 kernel 能夠處理的 IO 導致的,而 Ring Buffer 則是指在發(fā)起 IRQ 請求之前的那塊 buffer。很明顯,overruns 的增大意味著(zhù)數據包沒(méi)到 Ring Buffer 就被網(wǎng)卡物理層給丟棄了,而 CPU 無(wú)法即使的處理中斷是造成 Ring Buffer 滿(mǎn)的原因之一,上面那臺有問(wèn)題的機器就是因為 interruprs 分布的不均勻(都壓在 core0),沒(méi)有做 affinity 而造成的丟包。
RX frame: 表示 misaligned 的 frames。
對于 TX 的來(lái)說(shuō),出現上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error,而 collisions 則表示由于 CSMA/CD 造成的傳輸中斷。
在梳理這些 error/drop/discard 的時(shí)候,由于涉及到不同的 NIC 型號,ethtool/netstat 或者是直接從 proc 里面獲取到的數據所代表的意思還不完全一樣,比如上面通過(guò) ethtool 得到的「丟包」是通過(guò) rx_queue_NUM_drops 這個(gè)字段表示的,而通過(guò) netstat 看到的卻是 RX-OVR 表示的,一個(gè)是 overruns 一個(gè)是 dropped,字面意思完全不同
- # 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
- em2 1500 0 17159519100 0 0 164254181 14701510290 0 0 0 BMR
信息來(lái)源
不管是使用何種工具,最終的數據無(wú)外乎是從下面這兩個(gè)文件獲取到的:
- /sys/class/net/em2/statistics/
- /proc/net/dev
- # 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
- em2:2621515020998 17153788154 0 0 164254181 0 0 0 1480433225509 14696703883 0 0 0 0 0 0
對于上面出現的若干種問(wèn)題,一方面是做好監控,另外一方面是出現問(wèn)題的時(shí)候及時(shí)的想到各種的可能,無(wú)外乎那么幾種。
暫時(shí)處理
更新了網(wǎng)卡的驅動(dòng),對網(wǎng)絡(luò )丟包進(jìn)行了監控。當時(shí)出現丟包的具體原因還是不清楚,你是否有遇到過(guò)呢?