【发布时间】:2012-10-20 22:00:12
【问题描述】:
我有一个 java 客户端,它调用一个线程来访问一个 servlet,并从服务器上的日志中检索最后几行,并在客户端上显示检索到的日志行。每隔一段时间,日志线程就会超时。 应用程序服务器是 Tomcat,但该错误在 Tomcat 和 Websphere 中间歇性地重现,客户端在 Windows 上,服务器在 Windows 上。使用 Windows 上的客户端和 AIX 上的服务器,到目前为止还没有出现此问题。不得不提的是,代码在很多次迭代中都是稳定的,然后突然开始出现这些问题。
到目前为止我已经尝试过什么
日志读取客户端每 0.1 秒调用一次线程(使用睡眠)。我尝试在代码中将睡眠时间增加到 5 秒,但没有帮助。
在创建 URLConnection 对象时,我设置了 connectTimeout 和 readTimeout 等属性。我不认为 readTimeout 可能是一个原因,因为那会引发 Socket 异常。
3 我尝试使用 Tomcat 配置。
Connector port="9962" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8445" acceptCount="30"
4 。使用后url连接“断开”。
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)
您将如何诊断此问题?服务器日志没有显示任何可疑内容。据我所知,客户端和服务器没有任何其他网络设备,因此不需要代理,并且防火墙已关闭。 到目前为止我还没有使用过keep alive。
【问题讨论】:
-
我认为你达到了一些连接限制。尝试运行
netstat并检查您的连接情况。 -
确保不是 Internet 连接本身定期失败。编写一个 ping 4.2.2.1 并将结果记录到文件中的程序,如果您丢失数据包,它对应于软件中断的时间。然后致电 ISP 进行调查。
-
@Eric 这是办公室局域网内。 Ping 一直运行良好。我还没有看到这个 LAN 上有一个丢包。
-
检查客户端连接超时和客户端 JVM GC 时间。如果 GC 时间大于配置的连接超时,则会抛出此类错误。
标签: java tomcat networking timeout