2013-11-02 57 views
2

我想从java客户端调用我的远程tomcat服务器,但我间歇性地得到SocketTimeoutException:连接超时。 (http://docs.oracle.com/javase/7/docs/api/java/net/SocketTimeoutException.htmlSocketTimeoutException连接超时:我如何调试我的服务器的根本原因

这里是堆栈跟踪

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 box上,有没有办法可以查看为什么我的连接被拒绝?

+0

*确切*例外是什么?你已经给出了两个版本。当我尝试连接时,我会期待ConnectException:'connect timeout',或者在执行I/O时,我会期待SocketTimeoutException:'连接超时'。 – EJP

+0

你应该添加更多的细节,你已经检查过什么“服务器”,框架,语言,目的,日志?同一网络?远程? VPN?协议正在使用?现在你只是说“我的程序坏了” –

+0

更新了描述,让我知道现在是否更有意义,或者你想要其他具体细节。谢谢。 – user2562732

回答

1

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

开始监控服务器资源:(?你在Linux上运行)

  • CPU
  • 内存
  • 网络活动
  • 打开的句柄

间歇性可因为只有解释当服务器负载连接失败时。

您还可以尝试增加服务器上的连接超时时间as in this previous question

+0

不,不是。这会导致读取超时,而不是“连接超时”。 – EJP

+0

谁这么说?如果你没有处理,服务器将无法接受新的连接,打开套接字,启动线程等。'ulimit -a' –

相关问题