【问题现象】
512台虚拟机模拟客户主机环境,作为iSCSI initiator,与阵列(iSCSI target)8个管理口建立iSCSI连接。每次当前120个左右虚拟机建链成功后,阵列对网管下发的消息无响应,并且无法登录。
【定位过程】
查看日志,前120个左右虚拟机建链成功后,日志中消息处理模块开始出现大量socket连接超时错误[Errno 110] Connection timed out
随后尝试ssh登录环境,无法登录,且日志中无鉴权模块的打印,只有PAM模块的socket连接建立失败的打印。(由于阵列中的PAM模块是被定制的so,ssh登录时操作系统的登录流程会走到该so中,该so会直接通过socket连接登录鉴权模块进行密码鉴权。)因此排除业务模块问题,怀疑是底层TCP/IP协议栈机制问题。
netstat查看报文收发情况,观察到当问题开始发生时,app_data模块向msg_server模块发送的报文开始在发送队列中持续积压,且每次积压16KB或16KB整数倍的报文。但接收队列中并无消息积压。怀疑是app_data(发送方)报文发送的太快太大太多导致消息阻塞。
tcpdump抓包分析报文,发现确实存在很多发给msg_server的大小为16K的报文,甚至有64K的报文。。。(lo口的mtu为65536)。咨询业务模块该消息长度和发