Knowledgebase
SFTP transfer too slow (Java)
Posted by Mohammad Jawwad on 30 April 2010 11:48 PM
SFTP is a packet based protocol and therefore has a significant overhead due to encryption which is essential to the protocol's security. The approach suggested here is to transfer data by managing the connection buffer sizes & transfer block sizes. These factors have a direct effect on transfer rate much more so than the encryption algorithm used in the SFTP protocol.

SshParameters params = new SshParameters("[host]", "[user]", "[pass]");
int buffer = 1024*512;
params.getConnectionParameters().setSendBuffer(buffer);
params.getConnectionParameters().setReceiveBuffer(buffer);
Sftp sftp = new Sftp(params);
sftp.connect();
sftp.setDownloadBlockSize(buffer);
sftp.setUploadBlockSize(buffer);
// do transfer
sftp.disconnect();

If you notice the send buffer size, receive buffer size, download block size, upload block size is set to 1024*512 (512 KB where 1 KB = 1024 bytes). Take this as a starting point and increase the buffer size to the point where you do not receive any additional benefit.

For example, try incrementing the buffer sizes in increments of 256 bytes :

int buffer = 1024*512;
int buffer = 1024*768;
int buffer = 1024*1024;

What you are essentially doing here is to manage these variables :

1) SSH connection send and receive buffer sizes;
2) Upload & download block sizes;

See if this improves the transfer speed.
(75 vote(s))
This article was helpful
This article was not helpful

Comments (0)
Post a new comment
 
 
Full Name:
Email:
Comments:
Help Desk Software by Kayako fusion