異常信息:
com.jcraft.jsch.JSchException: channel is not opened.
at com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:765)
at com.jcraft.jsch.Channel.connect(Channel.java:151)
at com.jcraft.jsch.Channel.connect(Channel.java:145)
at com.lqting.common.utils.SFTPUtil.connect(SFTPUtil.java:71)
at com.lqting.common.batchjob.FileReadTask.handTask(FileReadTask.java:83)
at com.lqting.framework.batchjob.AbstractBatchJobHandler.runBatchJob(AbstractBatchJobHandler.java:54)
at com.lqting.framework.batchjob.AbstractBatchJobHandler.execute(AbstractBatchJobHandler.java:37)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
可能的原因:(查找資料的結果,供挑選)
- 服務器內存不足
- 連接數太小
- 安裝了其他應用衝突(這個是我猜的)
- 連接的超時時間過短
本次記錄針對2、4
2,連接數太小
命令查詢當前連接數:w | grep pts |wc -l
(這是同事給我的,不過這是查詢通過ssh連接服務器的數量)
修改/etc/ssh/sshd_config 將MaxStartups 加大,增大到合適的值
4,連接的超時時間過短
這是代碼層面可控的了。
本次記錄也主要是由於這個原因導致的,由於網絡速度並不是很快,通過ftp工具連接sftp服務都老長時間了,所以代碼連接時拋異常了。修改爲
解決方案:
由原代碼:
Channel channel = sshSession.openChannel("sftp");
channel.connect();
修改爲
Channel channel = sshSession.openChannel("sftp");
channel.connect(60000);
增加一個超時時間設置。
超時時間大於0的話,底層會有等待的時間和次數。