今天发现有一个数据延迟的很厉害, 通过日志查看, 日志 2G 的日志传输了半个小时的时间, 导致最后分析延迟. 是什么原因呢?
4 月 14 日 北京 |架构即未来作者陈斌: 可扩展性架构设计的 N 个原则
前言
今天发现有一个数据延迟的很厉害, 通过日志查看, 日志 2G 的日志传输了半个小时的时间, 导致最后分析延迟. 是什么原因呢?
分析原因
通过日志可以查看到 rsync 日志同步的速度比平时慢了 9 倍. 通过 zabbix 监控看到网络虽然比较繁忙, 但是还没有达到瓶颈. 所以猜测: 丢包了!!!
ifconfig 可以查看到一些网卡信息的汇总:
- # 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: 表示数据包已经进入了 Ring Buffer, 但是由于内存不够等系统原因, 导致在拷贝到内存的过程中被丢弃.
RX overruns: 表示了 fifo 的 overruns, 这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的, 而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer. 很明显, overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了, 而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一, 上面那台有问题的机器就是因为 interruprs 分布的不均匀(都压在 core0), 没有做 affinity 而造成的丢包.
RX frame: 表示 misaligned 的 frames.
对于 TX 的来说, 出现上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error, 而 collisions 则表示由于 CSMA/CD 造成的传输中断.
在梳理这些 error/drop/discard 的时候, 由于涉及到不同的 NIC 型号, ethtool/netstat 或者是直接从 proc 里面获取到的数据所代表的意思还不完全一样, 比如上面通过 ethtool 得到的丢包是通过 rx_queue_NUM_drops 这个字段表示的, 而通过 netstat 看到的却是 RX-OVR 表示的, 一个是 overruns 一个是 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
信息来源
不管是使用何种工具, 最终的数据无外乎是从下面这两个文件获取到的:
- /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
对于上面出现的若干种问题, 一方面是做好监控, 另外一方面是出现问题的时候及时的想到各种的可能, 无外乎那么几种.
暂时处理
更新了网卡的驱动, 对网络丢包进行了监控. 当时出现丢包的具体原因还是不清楚, 你是否有遇到过呢?
来源: http://server.51cto.com/sOS-569780.htm