我使用Jersey 1.4,ApacheHttpClient
和Apache MultiThreadedHttpConnectionManager
类来管理连接。对于HttpConnectionManager
,我将staleCheckingEnabled设置为true,将maxConnectionsPerHost设置为1000,将maxTotalConnections设置为1000.其他所有内容都是默认值。我们在Tomcat中运行,并使用Jersey客户端连接到多个外部主机。
我注意到经过一段时间后,我将开始看到处于CLOSE_WAIT状态的套接字与Tomcat进程相关联。使用tcpdump进行的一些监视显示外部主机在一段时间后似乎正在关闭连接,但它并没有在我们结束时关闭。通常在套接字读取队列中有一些数据,通常是24个字节。连接使用https,数据似乎是加密的,所以我不确定它是什么。
我已经检查过以确保创建的ClientRequest对象已关闭。 CLOSE_WAIT中的套接字似乎确实被回收了,至少在这个时候我们没有耗尽任何资源。我不确定外部服务器上发生了什么。
我的问题是,这是正常的,我应该关注吗?
谢谢,
约翰
答案 0 :(得分:1)
这很可能是防火墙或远程服务器等设备超时TCP会话。您可以使用Wireshark分析HTTPS的数据包捕获,如其SSL页面中所述:
staleCheckingEnabled标志仅在您实际使用连接时发出检查,因此您不需要使用网络资源(TCP会话)。