我正在尝试使用运行Ubuntu 14.04.4 LTS的Digital Ocean VPS上的某些文件的rsync进行备份。
rsync是非常缓慢的,范围从20-50 kB / s ,只有它应该是1% 。 使用scp或者在守护进程模式下使用rsync同样缓慢,所以这对于rsync或者ssh来说似乎不成问题。
我也可以访问另一个VPS(Linode),当使用来自VPS的rsync传输文件时,我得到2-3MB / s的预期传输速度。
此外,当我使用rsync直接从Digital Ocean VPS传输文件到Linode VPS时,我可以获得15MB / s的正常服务器间传输速率。 这些因素结合在一起,表明ssh和rsync在所有机器上工作正常。
现在我已经通过Linode VPS隧道传输ssh连接来避开这个问题,但是我很好奇可能会导致非常低的传输速率。
当你说“主要是15Mb tarballs”时,有多less个小文件? 您是否经常看到缓慢的速度,或者在更大的文件上看起来更快? 由于打开和closures每个文件的文件系统开销(以及任何需要的目录读取/修改操作),rsync(以及几乎任何其他的文件系统操作)在处理许多小文件时比较慢,而不是较less的较大文件操作。 VPS提供商通过将每个VM的IO操作每秒限制到一个固定的最大值来强制公平地使用IO,可能会加剧这种情况。
为了说明这一点:
dd if=/dev/urandom of=/tmp/test.file bs=1024 count=102400 for i in 1 10240 ; do dd if=/dev/urandom of=test.file.$i bs=1024 count=10; done ; do dd if=/dev/urandom of=test.file.$i bs=1024 count=10; done for i in seq 1 102400 ; do dd if=/dev/urandom of=test.file.$i bs=1024 count=1; done ; do dd if=/dev/urandom of=test.file.$i bs=1024 count=1; done 即使累积的内容大小相同,您也应该看到小文件的处理速度要慢得多。 即使你在本地而不是在networking上做任何事情,情况也是如此(尽pipenetworking显然会在某种程度上放大效果)。 在这里的一个小旧机器上, time rsync * /location/on/another/local/drive/给出了real 0m0.683s, user 0m0.596s, sys 0m0.220s用于1 * 100MB的情况以及real 0m38.793s, user 0m4.664s, sys 0m15.657s为102,400 * 1Kb – 相差〜57x。