2017-07-18 3 views
0

J'essaye de me connecter à un autre serveur via SSH avec la librairie JSCH, d'y exécuter une commande (vérifier la date actuelle avec TZ) et retourner le résultat.Etat de thread "TIMED_WAITING" lors de la connexion via SSH en utilisant JSCH

code ressemble à ceci:

private String processSSHCommand(String host, int port, String user, String password, String command) throws JSchException, IOException { 
       Session session = new JSch().getSession(user, host, port); 
       session.setPassword(password); 
       Properties config = new Properties(); 
       config.put("StrictHostKeyChecking", "no"); 
       session.setConfig(config); 
       session.connect(); 
       ChannelExec channel = ((ChannelExec) session.openChannel("exec")); 
       channel.setCommand(command); 
       channel.connect(); 
       String s = IOUtils.toString(channel.getInputStream(), "UTF-8"); 
       channel.disconnect(); 
       session.disconnect(); 
       return s; 
      } 

Il y a mon thread dump lorsque ce code est bloqué:

"[STUCK] ExecuteThread: '12' for queue: 'weblogic.kernel.Default (self-tuning)'" #35 daemon prio=1 os_prio=0 tid=0x00007fb3d4509000 nid=0xc87 in Object.wait() [0x00007fb3ec9d1000] 
    java.lang.Thread.State: TIMED_WAITING (on object monitor) 
at java.lang.Object.wait(Native Method) 
at java.io.PipedInputStream.read(PipedInputStream.java:326) 
- locked <0x00000007bcad22a0> (a com.jcraft.jsch.Channel$MyPipedInputStream) 
at java.io.PipedInputStream.read(PipedInputStream.java:377) 
- locked <0x00000007bcad22a0> (a com.jcraft.jsch.Channel$MyPipedInputStream) 
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 
- locked <0x00000007bcad5168> (a java.io.InputStreamReader) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.Reader.read(Reader.java:140) 
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1128) 
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1104) 
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1078) 
at org.apache.commons.io.IOUtils.toString(IOUtils.java:382) 
...processSSHCommand(...) 

Quelqu'un pourrait-il s'il vous plaît aider?

+0

Si vous avez des méthodes ou des blocs avec la synchronisation s'il vous plaît partager –

+0

Quelle est la 'commande'? Qu'est ce que ça fait? –

+0

Martin, la commande est simple - "date + '%: z'" –

Répondre

0

Votre code fonctionne parfaitement Je l'ai simplement exécuté dans la méthode principale. Comme je peux le voir, vous l'utilisez sous weblogic, donc ça pourrait être une cause.

Je ne sais pas exactement, mais je vous suggère d'essayer celui-ci:

ChannelExec channel = ((ChannelExec) session.openChannel("exec")); 
channel.setInputStream(null); // set to null 
channel.setCommand(command); 
channel.connect();