2013-11-02 91 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' –

相關問題