很多AIX用户习惯使用netstat来监控TCP重传等现象,通常网络正常的情况下,TCP重传率应该在万分之一以下,例如(netstat -s显示所有协议统计值或netstat -p tcp只显示TCP协议统计值):
# netstat -p tcp
tcp:
4215987 packets sent
1823787 data packets (12291072417 bytes)
41 data packets (38566 bytes) retransmitted
1082695 ack-only packets (179497 delayed)
0 URG only packets
0 window probe packets
861960 window update packets
447504 control packets
447 large sends
900141 bytes sent using largesend
21400 bytes is the biggest largesend
...
上图中重传率为41/1823787,即大约十万分之2左右。
客户反馈netstat统计结果看,存在大量重传,具体情况如下:
# netstat -s|grep retra
24118 data packets (337645472 bytes) retransmitted
0 path MTU discovery terminations due to retransmits
1168 retransmit timeouts
0 fast retransmits
0 newreno retransmits
0 times avoided false fast retransmits
271474256 TCP checksum offload disabled during retransmit
重传数据一直处于增长中,但根据问询了解的情况,业务层面未见异常。客户使用的系统版本为AIX 7.2TL3SP3.
对问题主机进行了iptrace抓包处理,使用Wireshark进行了数据包分析,使用tcp.analysis.retransmission 过滤规则,并未发现数据包重传现象:
对重传的统计数据进行再一轮审视,发现统计数据很可能存在问题:
24118 data packets (337645472 bytes) retransmitted
根据这段数据,每次重传的平均包大小为:14000字节,这显然超出了当前路径MTU 取值。正常发送过程中因为large send机制系统可能会发送最大64K字节的包(由网卡对包进行拆解分片),但重传场景通常不适用large send机制,重传包通常不超过path MTU.
综合分析,怀疑netstat统计值因为某种原因,出现了错误;但该错误从分析看只是统计问题,不涉及TCP/IP内核问题。
搜索AIX补丁,确定是如下缺陷导致:
IJ16586: NETSTAT PRINTS SOME MESSAGES INCORRECTLY APPLIES TO AIX 7200-03 20/02/14 PTF PECHANGE
https://www.ibm.com/support/pages/apar/IJ16586
从补丁描述看,netstat统计工具数据对齐有问题,导致输出显示错位;网络状态正常,不是大问题。可以通过如下方法修正其统计结果(在netstat命令前强制加上LANG=C环境变量):
LANG=C netstat -s|grep retra
测试验证如下:
# netstat -s|grep retra
24118 data packets (337645472 bytes) retransmitted
4003 path MTU discovery terminations due to retransmits
1168 retransmit timeouts
0 fast retransmits
0 newreno retransmits
0 times avoided false fast retransmits
0 TCP checksum offload disabled during retransmit
# LANG=C netstat -s|grep retra
0 data packets (0 bytes) retransmitted
1168 path MTU discovery terminations due to retransmits
3509 retransmit timeouts
0 fast retransmits
0 newreno retransmits
0 times avoided false fast retransmits
0 TCP checksum offload disabled during retransmit
不使用LANG=C环境变量设置时,netstat -s命令显示每秒大约几百个重传包,使用LANG=C环境变量设置运行netstat -s之后,一个重传都没有了。问题确认完毕。
由于7200-03-04-1938已包含此补丁,建议直接将系统升级到AIX 7.2TL3SP4.
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论