JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析

JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析

文章目录

  • JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析
    • 1. 背景
      • 1.系统使用jsch这个框架做文件发送以及远程命令执行的操作,系统一直运行正常,直到某一个环境发现
    • 2.分析
      • 1.bug堆栈,具体问题

1. 背景

1.系统使用jsch这个框架做文件发送以及远程命令执行的操作,系统一直运行正常,直到某一个环境发现

com.jcraft.jsch.JSchException: channel is not opened.
	at com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:768)
	at com.jcraft.jsch.Channel.connect(Channel.java:151)
	at com.jcraft.jsch.Channel.connect(Channel.java:145)
	at com.SeTest.executeShell(SeTest.java:134)
	at com.SeTest$1.run(SeTest.java:31)
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)
	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1618)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

2.分析

因为出现比较少,初步觉得是网络波动导致,但是在系统繁忙的时候频繁出现,此处写了个demo具体分析一下

1.bug堆栈,具体问题

JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析_第1张图片

SSH_MSG_CHANNEL_OPEN_FAILURE
ssh通道打开失败

关于channel,首先要了解

在SSH协议的会话(session)中,channel是一个用于在客户端和服务器之间建立通信通道的概念。Channel的主要目的是在SSH连接中提供一种安全、加密和可靠的数据传输机制。

通道的创建:当一个SSH会话建立时,可以创建多个channel。Channel是逻辑上的概念,用于在客户端和服务器之间传输数据。每个channel都有一个唯一的ID标识符。

追踪channel的创建过程,确实是这样,框架中也是这样保存的

JSch线上出现com.jcraft.jsch.JSchException: channel is not opened.问题分析_第2张图片

jsch会维护一个channel的连接池
篇幅太长,看原文吧
原文地址

你可能感兴趣的:(tomcat,servlet,spring,boot,spring,cloud,ssh)