2017-06-15 6 views
0

J'utilise actuellement ch.ethz.ssh2.Connection pour me connecter à mes serveurs en java. parfois, il se bloque sur un serveur (peut-être 10-15 secondes). Je voulais savoir ce qui cause ce temps d'arrêt et comment l'éviter.Quelles sont les causes de ch.ethz.ssh2.Connection pour avoir une heure de suspension?

échantillon de connexion

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

Est-ce toujours/souvent le même serveur ou cela varie-t-il? – Robert

+0

@Robert Surtout sur les mêmes serveurs, mais varie. Aussi, avec votre exemple plus tôt pour le pool de threads, y a-t-il une limite maximale? – Jesse

Répondre

1

La question principale est la suivante: Est-ce un problème de code, un problème de réseau ou un problème de serveur.

Un problème de code peut être débogué - malheureusement, ch.ethz.ssh2.Connection n'a aucune possibilité de journalisation pour détecter ce qui se passe à l'intérieur.

Peut-être devriez-vous changer la bibliothèque ssh (ou l'utiliser pour certains tests avec les serveurs problématiques). De mon expérience sshj est très utile.

S'il s'agit d'un problème réseau ou d'un problème de serveur, vous pouvez vérifier ce qui se passe via Wireshark. Si des paquets réseau sont envoyés mais que la réponse est retardée, le problème n'est pas le code client utilisé.

+0

J'utilise le service d'exécution dans mon application. Mais j'ai encore le temps de se détendre. Je veux savoir ce qui cause les serveurs lents. J'ai aussi threadpool réglé à 80, cela constituerait-il une menace? – Jesse

+0

Voir ma réponse mise à jour – Robert

+0

Avec le service d'exécution que vous avez montré plus tôt, comment arrêteriez-vous le thread si cela prend plus de 1000 millisecondes? – Jesse

0

Mon psychic debugging powers dites-moi que le serveur effectue une recherche DNS sur l'adresse IP de chaque client qui se connecte. Ces recherches DNS prennent beaucoup de temps à se terminer ou échouent complètement. La recherche DNS bloquera le processus d'authentification jusqu'à ce qu'il se termine, avec succès ou non.

Si le serveur est the OpenSSH server, ce comportement est contrôlé par l'option "UseDNS" sshd config.

+0

comment puis-je arrêter les serveurs qui prend beaucoup de temps pour se connecter? – Jesse