2012-10-31 78 views
2

我有一個java客戶端調用一個線程來訪問一個servlet並從服務器上的日誌中檢索最後幾行,並在客戶端顯示檢索到的日誌行。每隔一段時間,日誌線程就會超時。 應用程序服務器是Tomcat,但該錯誤在Tomcat和Websphere中間歇性地可重現,Windows上的客戶端和Windows上的服務器上都可以重現。使用AIX上的Windows和服務器上的客戶端,直到現在這個問題還沒有發生。我必須提到代碼在很多迭代中都很穩定,並且突然開始提出這些問題。診斷間歇性連接超時?

我已經試過到目前爲止

  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) 

你會如何去診斷這個問題?服務器日誌不會顯示任何可疑內容。據我所知,客戶端和服務器沒有任何其他網絡設備,因此不需要代理服務器,並且防火牆關閉。 到目前爲止我還沒有使用過。

+0

我認爲你達到了一些連接限制。嘗試運行'netstat'並檢查你有多少hany連接。 – user1516873

+0

確保它不是Internet連接本身定期失敗。編寫一個ping 4.2.2.1的程序,並將結果記錄到一個文件中,如果丟失了數據包並且它對應於軟件中斷的時間。然後致電ISP調查。 –

+0

@Eric這是辦公室局域網內部。萍一直工作得很好。我還沒有看到在這個LAN上的一個數據包丟失。 –

回答

2

很難預測是什麼造成了這種情況。但是,下一步應該是嘗試在客戶端和/或服務器上運行數據包嗅探器,以查看TCP連接請求是否將其發送到Windows計算機。

如果問題同時出現在Tomcat和Websphere中,那就意味着原因是在較低的水平;即在OSes TCP/IP堆棧,防火牆......或網絡中。 (如果服務器運行在虛擬環境中,則可能是虛擬網絡中的一個輟學。)