3

我正在尝试从 java 客户端调用我的远程 tomcat 服务器,但我间歇性地得到 SocketTimeoutException:连接超时。(http://docs.oracle.com/javase/7/docs/api/java/net/SocketTimeoutException.html

这是堆栈跟踪

Caused by: java.net.SocketTimeoutException: connect timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:382)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:241)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:228)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:365)
        at java.net.Socket.connect(Socket.java:527)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:570)
        at org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory.createSocket(EasySSLProtocolSocketFactory.java:189)
        at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)

它不一致,在我的代码多次尝试连接后它就消失了。

我明白socketTimeout是什么意思,我没有读取超时但连接超时,这意味着客户端无法与服务器建立tcp连接。意味着服务器只是忽略客户端尝试连接它,因为它不可用或太忙那个端口上的其他东西。我知道我的服务器可以访问并且正在运行。

显然我连接到服务器的尝试被拒绝了,我想知道为什么?我该如何开始?我应该寻找什么?我的服务器在运行在 EC2 实例上的 redhat linux 机器上运行,有没有办法可以查看为什么我的连接被拒绝?

4

1 回答 1

2

可能的原因是其他进程或 Tomcat 本身消耗资源导致应用程序无响应。

开始监控服务器资源:

  • 中央处理器
  • 记忆
  • 网络活动
  • 打开句柄(你在 linux 上运行吗?)

可以解释间歇性,因为只有当服务器处于负载状态时,连接才会失败。

您还可以尝试增加服务器上的连接超时,如上一个问题中所述。

于 2013-11-02T05:25:10.687 回答