Can you please tell the internal working of ChannelSftp.get( "file_name")
? Will the use of this function to get a single file from a list of files (600 files of 10 kb) can cause memory leakage issues in Tomcat8, if this function is used frequently?
This is the code which is used for uploading and fetching files from remote server.
public String connectRemote(String host, String user, String password, String
remotePath, String sFileName) throws IOException, JSchException, SftpException
{
try {
String sFileNames ="";
Session session = connectSFTP(host, user, password);
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp chan = (ChannelSftp) channel;
try {
String ftpRemoteDirectory = "/Irismedical/Outbox_Eligibility";
chan.cd(ftpRemoteDirectory);
File ftest = new File(sFileName);
chan.put(new FileInputStream(ftest), ftest.getName());
sFileNames = ftest.getName();
}
catch (Exception e) {
chan.disconnect();
session.disconnect();
return null;
}
chan.cd("/Irismedical/Inbox/Eligibility");
String sRes = null;
for (int i = 0;i<6 ; i++) {
try {
sRes = convertInputStreamToString(
chan.get(sFileNames+"_Response_271_1.edi"));
if (sRes != null ) {
break;
} catch (Exception e ) {
if (i<3) {
Thread.sleep(3000);
} else {
Thread.sleep(5000);
}
}
}
session.disconnect();
return sRes;
}
catch (Exception e) {
}
return null;
}
}
private static String convertInputStreamToString(InputStream inputStream)
throws IOException {
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
return result.toString(StandardCharsets.UTF_8.name());
}
You have to dispose the streams.
Both the FileInputStream
in your upload code and the InputStream
returned by ChannelSftp.get
in your download code.
来源:https://stackoverflow.com/questions/58055995/memory-leak-using-while-uploading-and-downloading-a-file-may-be-because-of-usin