问题: jsch是一个sftp的工具库,生产发现访问sftp服务器的老连接一直未释放,新连接不断产生。

分析: 检查jsch的使用代码

JSch jsch = new JSch();

Session session = jsch.getSession("xxxxxx", "127.0.0.1", 22);

session.setPassword("******");

session.setConfig("StrictHostKeyChecking", "no");

session.connect();

Channel channel = session.openChannel("sftp");

channel.connect();

ChannelSftp c = (ChannelSftp) channel;

channel.connect();

//...

channel.disconnect();

发现:从官方的例子(http://www.jcraft.com/jsch/examples/Sftp.java)上看到,最需要关闭的是session对象而不是channel对象 

本地代码测试: 每执行一次下载文件,都会新增一个线程session未关闭

jsch sftp工具包连接未释放

 

解决问题:

/** 关闭session */

Session session = sftp.getSession();

if(session != null){  

    session.disconnect(); 

 }

相关文章: