故障现象
其他业务访问分布式文件系统,出现卡顿的现象,具体现象为建立连接后卡在请求但无响应的情况,同时服务端无访问客户端的ESTABLISHED的连接。
业务使用程序
客户端:Java HTTPClient
服务端:分布式文件系统
简单分析
由于是纯内网环境,基本排除了丢包的可能。
服务端承受不了客户端高并发访问,同时客户端超时时间不合理断开连接,导致客户端主动断开连接而未发送ACK到服务端,导致服务端大量CLOSE_WAIT,产生DOS效果。
关闭客户端业务或者重启服务端程序,其他业务会恢复正常运行。
优化处理
在设置内核参数tcp_orphan_retries为5后,服务端不出现CLOSE_WAIT和LAST_ACK现象,但客户端会出现大量CLOSE_WAIT。即使设置了Read Time和请求的超时时间,业务卡在请求处不会超时,客户端连接为ESTABLISHED,但服务端没有发现该端口的连接这种奇怪现象。
其他业务访问分布式文件系统进行GET和PUT请求未出现CLOSE_WAIT的情况,但是会影响到GET的性能出现卡请求的情况。
结论
初步认定为Java HttpClient代码中调用有BUG未关闭连接或者是分布式文件系统程序BUG,具体问题需要后续继续跟进。