我有一个java客户端,它调用一个线程来访问servlet并从服务器上的日志中检索最后几行,并在客户端上显示检索到的日志行。每隔一段时间,日志线程就会超时。 应用程序服务器是Tomcat,但错误在Tomcat和Websphere上间歇性地可重现,Windows上的客户端和Windows上的服务器。对于AIX上的Windows和服务器上的客户端,此问题直到现在才发生。我必须提到代码在很多次迭代中都是稳定的,并且突然开始出现这些问题。
到目前为止我尝试了什么
日志读取客户端每0.1秒调用一次该线程(使用休眠)。我尝试在代码中将睡眠时间增加到5秒,但它没有帮助。
创建URLConnection对象时,我设置了connectTimeout和readTimeout等属性。我不认为readTimeout可能是一个原因,因为这会抛出一个Socket异常。
3我尝试使用Tomcat配置。
Connector port="9962" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8445" acceptCount="30"
4。使用后网址连接“断开连接”。
5堆栈跟踪似乎暗示请求从未到达应用程序服务器,这可能是因为连接上的某些操作系统层限制。但在这种情况下,Windows的事件查看器中会有一个条目。
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
你将如何诊断这个问题?服务器日志不会显示任何可疑内容。据我所知,客户端和服务器没有任何其他网络设备,因此不需要代理,并且防火墙已关闭。 到目前为止,我还没有使用过活着。
答案 0 :(得分:4)
很难预测造成这种情况的原因。但是,您的下一步应该是尝试在客户端和/或服务器上运行数据包嗅探器,以查看TCP连接请求是否正在进入Windows计算机。
如果Tomcat和Websphere都出现问题,那就意味着原因处于较低水平;即在OSes TCP / IP堆栈,防火墙......或网络中。 (如果服务器在虚拟网络中运行,则可能是虚拟网络中的丢失。)