我试图使用SFTP在国际上传输一组大文件,但是我发现我的国际合作伙伴无法获得超过〜50k的上传速度,尽pipe在任何一方都有非常好的连接。 我们可以以这个速度上传多个连接(所以不是带宽?),但是没有一个上传速度提高了,这是一个问题,因为许多文件的大小是几十亿字节。
SFTP使用标准的Apple OSX“远程login”SFTP系统进行托pipe。
有没有办法提高上传速度,还是有一个不同的SFTP主机,可以帮助吗? 我不清楚这是一个configuration问题还是协议的固有限制。
(出于安全原因,我需要使用端到端的encryption对等连接 – 不需要云服务)。
使用OpenSSH sftp
客户端 (您似乎使用),您可以使用:
-R
开关增加请求队列的长度(默认是64) -B
开关增加读/写请求的大小(默认是32 KB) 首先,尝试加倍两者:
sftp -R 128 -B 65536 user@host
这可能无关紧要,你们中哪一个增加了。
增加要么有助于饱和高延迟连接。 通过以上设置,可以随时保持8 MB的数据stream量(128 * 64K = 8M)。
请注意,这只对大文件传输有帮助。 当传输大量小文件时,它不会有任何效果。
有关其他(GUI)SFTP客户端的一些背景知识和讨论,请参阅我的答案的“networking延迟/延迟”部分。 为什么FileZilla的SFTP文件传输的最大上限为1.3MiB /秒,而不是使可用带宽饱和? rsync和WinSCP甚至更慢 。
你可以尝试启用压缩,看看是否有帮助。
从man sftp
:
-C
启用压缩(通过ssh的-C标志)。
从man ssh
:
-C
请求压缩所有数据(包括stdin,stdout,stderr和转发的X11,TCP和UNIX域连接的数据)。 压缩algorithm与gzip(1)使用的是相同的,“level”可以由协议版本1的CompressionLevel选项来控制。在调制解调器线和其他慢速连接上压缩是可取的,但是只会减慢快速networking。 默认值可以在configuration文件中逐个主机地进行设置; 请参阅压缩选项。
这听起来好像连接可能是沿着它的path某一点上的速率限制(或者说,在我看来,对于每个连接50kB / s最简单的解释,但是可能有多个这样的连接),虽然它可能不是不好的想法,以确保任何一方的磁盘不是一个因素。
你也可以运行一个快速的pcap来查看是否有任何“明显的”问题(例如大量的重发) – 但是除非你有一些自信,否则你可以解决这个问题,帮帮我。
加快sftp传输
假设你的问题是每个TCP连接的networking调优和/或节stream,请使用lftp镜像子系统来看看sftp
在每一端进行networking调整是一个更大的话题,需要大量的来回,将这个话题推到了ServerFault的范围之外。 对于单独的连接, iwaseatenbyagrue提到的压缩可能会有所帮助。 这假定远端允许压缩。
(你在问题标题中提到了“高延迟”,但在正文中没有提到,你测量了实际的延迟,结果是什么?)
OpenSSH有一个补丁,可以显着提高高延迟networking链路的吞吐量: HPN-SSH :(强调我的)
SCP和OpenSSH中的底层SSH2协议实现是由静态定义的内部stream量控制缓冲区来限制networking性能的。 这些缓冲区往往最终成为SCPnetworking吞吐量的瓶颈,特别是在长时间和高带宽networking链路上。 修改ssh代码以允许在运行时定义缓冲区消除了这个瓶颈。 我们已经创build了一个补丁,可以消除OpenSSH中的瓶颈,并且可以与其他服务器和客户端完全互操作。 此外,HPN客户端将能够从非HPN服务器下载得更快,并且HPN服务器将能够更快地从非HPN客户端接收上传。
所以,尝试在接收端编译和使用HPN-SSH,看看它是否提高了传输速度。
我正在尝试使用SFTP在国际上传输一组大文件
它还没有被提及作为答案,但是当通过高延迟链接传输多个文件时,有一个非常简单的解决scheme来获得更好的性能:
并行传输多个文件。
这是你甚至在你的问题中提到的解决scheme。 用它。
基本上,TCP协议不能很好地处理大带宽延迟产品的连接 – 单个连接无法保持足够的数据在任何时间移动。 请参阅https://en.wikipedia.org/wiki/TCP_tuning
由于每个连接都受到TCP协议的限制,只需要使用更多的连接。
不知道这是否是一个选项,但你有没有尝试过把数据推送到国际站点? 以及在不同的时间,以查看是否有争议的networking资源的问题?
我们可以以这个速度上传多个连接(所以没有带宽?)
这听起来像是一个configuration问题 – 有意(作为一种上调服务,而不必作出任何额外的规定)或意外(如窗口缩放或过度交通pipe制)的configuration问题。 虽然您可以并行传输,但是您不会告诉我们连接的另一端是什么,或者是否值得开发一些简单的脚本来处理文件的分片/重构。
调整队列大小和压缩不会有什么重大的影响,除非原因是非常糟糕的软件编写(openSSH不属于这个类别 – 没有太多的意义,使用openssh与更长的请求队列/更大的块大小,除非延迟是超过250毫秒你可能会考虑尝试从不同地点的不同客户端排除服务器的问题。
我的第一个电话是要确定哪个提供者是为了解决这个问题,要求他们解决问题或者转换到另一个提供者。