java - 诊断间歇性连接超时?

标签 java tomcat networking timeout

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

到目前为止我尝试了什么

  1. 日志读取客户端每 0.1 秒调用一次线程(使用 hibernate )。我尝试在代码中将 sleep 时间增加到 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)

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

最佳答案

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

如果问题同时出现在 Tomcat 和 Websphere 上,则意味着原因在较低级别;即在操作系统 TCP/IP 堆栈、防火墙......或网络中。 (如果服务器在虚拟中运行,则可能是虚拟网络中的一个中断。)

关于java - 诊断间歇性连接超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13158040/

相关文章:

internet-explorer - 确保更新站点时在 Internet Explorer 上清除网站缓存

networking - 在启动之前,Docker 镜像上有两个 NIC

asp.net - 使用ASP.NET将文件从服务器发送到客户端

java - 我的 JFrame 和 JDialog 登录系统的错误行为

java - App Engine DataStore - 复合索引 - 数据存储索引 - 不起作用

java - Dropwizard 嵌套事务

java - 如何使用 Spring Boot 读取多部分?

java - 如何解决 Catalina 上的 StandardWrapperValve 错误?

tomcat webapps目录绝对路径?

golang 检查 tcp 端口打开