4

我有一个 java 客户端,它调用一个线程来访问一个 servlet,并从服务器上的日志中检索最后几行,并在客户端上显示检索到的日志行。每隔一段时间,日志线程就会超时。应用程序服务器是 Tomcat,但该错误在 Tomcat 和 Websphere 中间歇性地重现,客户端在 Windows 上,服务器在 Windows 上。使用 Windows 上的客户端和 AIX 上的服务器,到目前为止还没有出现此问题。我必须提到,代码在很多次迭代中都是稳定的,然后突然开始出现这些问题。

到目前为止我尝试过的

  1. 日志读取客户端每 0.1 秒调用一次线程(使用睡眠)。我尝试在代码中将睡眠时间增加到 5 秒,但没有帮助。

  2. 创建 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)

你将如何诊断这个问题?服务器日志没有显示任何可疑内容。据我所知,客户端和服务器没有任何其他网络设备,因此不需要代理,并且防火墙已关闭。到目前为止,我还没有使用过保持活力。

4

1 回答 1

4

很难预测是什么原因造成的。但是,您的下一步应该是尝试在客户端和/或服务器上运行数据包嗅探器,以查看 TCP 连接请求是否正在发送到 Windows 机器。

如果问题同时出现在 Tomcat 和 Websphere 中,则意味着原因处于较低级别;即在操作系统 TCP/IP 堆栈、防火墙……或网络中。(如果服务器在虚拟环境中运行,它可能会在虚拟网络中退出。)

于 2012-10-31T13:11:40.280 回答