charleschchen
作者charleschchen·2021-04-02 15:36
系统架构师·浪潮商用机器有限公司

AIX 7.2TL3SP3 netstat统计异常问题

字数 2309阅读 3928评论 0赞 1

很多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 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广