我正在使用Jersey 1.4,ApacheHttpClient和Apache MultiThreadedHttpConnectionManager类来管理连接。对于HttpConnectionManager,我将staleCheckingEnabled设置为true,将maxConnectionsPerHost设置为1000,将maxTotalConnections设置为1000。其他所有设置均为默认设置。我们正在Tomcat中运行,并使用Jersey客户端建立与多个外部主机的连接。

我注意到一段时间后,我将开始看到与Tomcat进程相关联的CLOSE_WAIT状态的套接字。使用tcpdump进行的某些监视显示,一段时间后,外部主机似乎正在关闭连接,但最终没有关闭。通常,套接字读取队列中有一些数据,通常为24个字节。连接使用的是https,数据似乎已加密,所以我不确定它是什么。

我已检查确保已关闭创建的ClientRequest对象。 CLOSE_WAIT中的套接字似乎确实被回收了,至少在目前,我们没有耗尽任何资源。我不确定外部服务器上正在发生什么。

我的问题是,这很正常吗?

谢谢,

约翰

最佳答案

这可能是防火墙或远程服务器等设备使TCP session 超时的设备。您可以使用Wireshark分析HTTPS的数据包捕获,如其SSL页面所述:

http://wiki.wireshark.org/SSL

staleCheckingEnabled标志仅在您实际使用连接时才发出检查,因此不需要网络资源(TCP session )时就不会使用它们。

关于java - Jersey Client中的CLOSE_WAIT中的套接字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4651484/

10-13 03:06