2017-06-15 544 views
0

我目前使用ch.ethz.ssh2.Connection連接到我在java中的服務器。有時會掛在一臺服務器上(可能需要10-15秒)。我想知道是什麼原因導致了這個掛機時間,以及如何避免這種掛機。什麼原因導致ch.ethz.ssh2.Connection掛起時間?

連接樣品

conn = new ch.ethz.ssh2.Connection(serverName); 
    conn.connect(); 

    boolean isAuthenticated = conn.authenticateWithPassword(user, pass); 
    logger.info("Connecting to " + server); 

    if (isAuthenticated == false) { 
     logger.info(server + " Please check credentials");    
    } 

    sess = conn.openSession(); 

    // I am connecting to over 200 servers and closing them. What would be the best practice to loop thru all these servers in the minimal time. 

//some servers quickly connects, while some takes some time. 
why does this happen? 
+0

它總是/通常是相同的服務器還是它有所不同? – Robert

+0

@羅伯特大多在同一臺服務器上,但各不相同。此外,你的例子早些時候用於線程池是否有最大限制? – Jesse

回答

1

的主要問題是:這是一個代碼問題,網絡問題或服務器問題。

可以調試代碼問題 - 不幸的是ch.ethz.ssh2.Connection沒有任何記錄可能性來檢測到裏面會發生什麼。

可能是你應該關於切換ssh庫(或使用它與有問題的服務器進行一些測試)。從我的經驗sshj是非常有用的。

如果是網絡問題或服務器問題,您可以通過Wireshark檢查發生了什麼。如果發送網絡數據包但響應延遲,則問題不在於使用的客戶端代碼。

+0

我在我的應用程序中使用執行程序服務。但我仍然有空閒時間。我想知道導致服務器速度慢的原因。此外,我已將線程池設置爲80,是否會構成威脅? – Jesse

+0

Se我的更新回答 – Robert

+0

使用您之前展示的執行器服務,如果線程耗時超過1000毫秒,您將如何關閉線程? – Jesse

0

我的psychic debugging powers告訴我,服務器正在對每個連接的客戶端的IP地址進行DNS查找。這些DNS查詢需要很長時間才能完成,或者完全失敗。 DNS查找將阻止身份驗證過程,直到它成功完成。

如果服務器是the OpenSSH server,則此行爲由sshd config「UseDNS」選項控制。

+0

如何關閉需要很長時間連接的服務器? – Jesse

相關問題