JSch d'expiration de la session de limite
Je suis en utilisant JSch 0.1.50 pour configurer une connexion au serveur distant pour ma CI plugin Jenkins. Supposons que je suis en train d'utiliser ici session.connect(60000);
pour le délai d'attente de 60 secondes:
Session session = null;
try {
JSch jsch = new JSch();
if (rsaIdentity != null && !rsaIdentity.equals("")) {
jsch.addIdentity(rsaIdentity.trim());
}
session = jsch.getSession(serverLogin, serverHost, Integer.parseInt(serverPort));
session.setPassword(getDescriptor().getOpenPassword(encryptedPasswordString));
session.setConfig("StrictHostKeyChecking", "no"); //not use RSA key
int timeOut = Integer.parseInt(getDescriptor().getConnectionTimeOut());
session.connect(60000);
} catch (SocketTimeoutException e) {
logger.error(e.getMessage());
return false;
} catch (JSchException e) {
logger.error(e.getMessage());
return false;
}
Mais en fait, au cours de l'exécution de ce code lors de la connexion assez lente sever je suis face à un timeout Exception
dans environ 20 secondes à chaque fois:
2016-01-25 13:15:55.982 [INFO] Connecting to server: devsrv26:22 as [user] ...
2016-01-25 13:16:16.991 [ERROR] java.net.ConnectException: Connection timed out: connect
2016-01-25 13:16:16.992 com.jcraft.jsch.JSchException: java.net.ConnectException: Connection timed out: connect
2016-01-25 13:16:16.992 at com.jcraft.jsch.Util.createSocket(Util.java:389)
2016-01-25 13:16:16.993 at com.jcraft.jsch.Session.connect(Session.java:215)
2016-01-25 13:16:16.993 at com.mycomp.jenkins.MyPlugin.perform(MyPlugin.java:225)
76991-55982=21008 msec
Personne ne sait quelle est la raison de ce 20 secondes?
Le problème était dans la configuration de l'IP à partir du serveur. Le serveur avait adresse ip DMZ, qui a été configuré avec délai d'attente de connexion.
OriginalL'auteur Khmelevskikh Alex | 2016-01-26
Vous devez vous connecter pour publier un commentaire.
Si vous cochez la façon dont le
Util.createSocket
est mis en œuvre, vous verrez que latimeout
définit une limite supérieure de la connexion, pas de limite inférieure, parce que letimeout
est étrangement pas transmis à un sous-jacentSocket
.Ces 20 secondes est sans doute un OS au niveau de la limite par défaut.
De le remplacer, essayez d'appliquer les
SocketFactory
et de le joindre à la session à l'aide de laSession.setSocketFactory
.Dans l'usine utilise le
Socket.connect(SocketAddress point de terminaison, int timeout)
.Quelque chose comme:
OriginalL'auteur Martin Prikryl