JSch : channel never closed or EOF 通道未关闭

最近,我们的项目在开发远程节点管理的时候,使用了jsch库。在测试的时候发现有个节点在cmd执行完成之后,channel.isClosed()一直都是false,导致请求无法返回,但是其它有些节点就没有关系,直接执行都是正常的,返回码也是完全相同。经google,也没有找到相应解决方法比如https://github.com/lucastheisen/jsch-extension/issues/6,https://stackoverflow.com/questions/12138777/jsch-channel-never-closed-or-eof(加上exit并无法解决),经仔细研究与分析,以及帖子https://sourceforge.net/p/jsch/mailman/message/24270241/,可知可能确实会出现channel无法检测到close的情况。最后解决方法:

判断channel.exitStatus是否为0,为0代表正常结束了,因为-1代表命令还没有执行完。后续观察看看有没有其他不正确的误报情况。

参考:

https://sourceforge.net/p/jsch/mailman/jsch-users/thread/4B39D620.30006%40i4s.co.jp/#msg24270241

原文地址:https://www.cnblogs.com/zhjh256/p/9520295.html

时间: 2024-11-13 10:11:21

JSch : channel never closed or EOF 通道未关闭的相关文章

[GO]通道的关闭

并不是往通道里放多少次数据,就必须取多次少数据的(之前的例子都是放3次取3次,放10次取10次),我们可以做一个操作,当子协程没有新放入的时候,主协程不再去取,这就是关闭通道 package main import "fmt" //channel并不像文件那样需要经常去关闭它,只有当你确实没有任何发送数据了,或者是你想显示的结束range循环之类的,才去关闭channel //关闭channel后,无法向channel再发送数据(引发panic错误后导致接收立即返回零值) //关闭ch

未关闭InputStream 引起的血案

下面的方法是从aws s3 读取文件对象下载到本地 public int downloadFile(HttpServletResponse httpResponse, String storePath, long p, long pend, int len, long realLen) throws IOException { String key = getKeyByStorePath(storePath); String bucketName = getBucketNameFromKey(k

解决cursor未关闭造成的死锁

参考:https://blog.csdn.net/zc474235918/article/details/72731363/ https://blog.csdn.net/zmx729618/article/details/51259135 # import pymysql # conn=pymysql.connect(host='127.0.0.1',user='root',passwd='123456',db='mysql',charset='utf8', port=3306) # cur=c

未关闭的文件流会引起内存泄露么?

最近接触了一些面试者,在面试过程中有涉及到内存泄露的问题,其中有不少人回答说,如果文件打开后,没有关闭会导致内存泄露.当被继续追问,为什么会导致内存泄露时,大部分人都没有回答出来. 本文将具体讲一讲 文件(流)未关闭与内存泄露的关系. 什么是内存泄露 定义:当生命周期长的实例L 不合理地持有一个生命周期短的实例S,导致S实例无法被正常回收 举例说明 上面的代码可能会发生内存泄露 我们调用AppSettings.getInstance.setup()传入一个Activity实例 当上述的Activ

记一次排查mysql数据库连接未关闭问题的过程

在一些项目中由于一些特殊原因仍然保留着显示的获取数据库连接(Connection).提交事务.回滚事务.关闭连接等操作:其中关闭连接是比较容易疏忽又比较难在前期发现的问题. 我是如何排查连接未关闭的问题的? 首先还是提出3W: 1.What? 数据库连接是应用服务器和数据库之间建立的tcp连接,在获取连接并进行操作后需要手动关闭以释放资源,就像是文件流一样,资源是有限的. 2.Why? 连接不释放会导致连接池无法回收连接,进而数据库连接逐渐被占满,直到超出数据库设置的最大连接数而拒绝服务,显而易

HibernateDaoSupport 类session未关闭导致的连接泄露问题

Spring+Hibernate做项目, 发现有member在不加事务的情况下就去调用 getSession() 方法, 结果导致数据库连接不能释放, 也无法正常的提交事务(只能做查询, 不能做save(), update()). 如果配合连接池使用的话, 不出几分钟就会导致连接池无法拿到新连接的情况. 不过, 只要给DAO或者Service加入了事务, 就不会出现连接泄漏的问题. 谈谈解决方案: 最佳方案: 加入事务, 例如 tx 标签或者 @Transactional 都可以. 最笨方案:

如何解决“连接未关闭。 连接的当前状态为打开”问题

1.可以在打开连接语句外套一个判断语句 if (conn.State ==ConnectionState.Closed)    {            conn.Open();    } 2.或者查看open语句外部是否已经包裹了open的语句如: public ***** () { SqlConnection conn = new SqlConnection(*********); conn.open() using(***********) { **** **** **** **** co

postgreSQL dropdb时 连接未关闭

如下图: 解决步骤: 1 . select * from pg_stat_activity where datname ='lnarterydb'   //查询该库有哪些会话 查询结果会有两个pid 2. SELECT  pg_terminate_backend(pid) ;     //中断该会话,回滚未提交事物 关于 pg_terminate_backend(pid) 函数,可以参考这儿 http://blog.163.com/dazuiba_008/blog/static/36334981

未关闭虚拟机直接关闭vmware引发的一系列问题——Windows下linux虚拟机

虚拟机长时间挂起重新打开时卡顿,无法开启,脑抽直接关闭了vmware软件引起的一系列问题. 原因是关闭了vmware,但是相应的虚拟机并没有关闭,所以虚拟机不能重开 会出现如下提示 解决方案如下: 1,首先删除虚拟机目录中的所有.lok文件夹和一个很大的.vmem文件注①,如果顺利删除,那皆大欢喜,直接重启vmware和虚拟机就ok了,当然一般情况下会出现如下提示 如图所示,你需要先关闭vmware-vmx.exe进程才可以,那么下一步 2,我们关闭vmware-vmx.exe进程 首先打开任务