问题: 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未关闭 。
解决问题:
/** 关闭session */
Session session = sftp.getSession();
if(session != null){
session.disconnect();
}