Я пытаюсь выполнить резервное копирование с помощью rsync некоторых файлов на Digital Ocean VPS под управлением Ubuntu 14.04.4 LTS.
rsync работает очень медленно, от 20-50 кБ / с, только 1% того, что должно быть. Это одинаково медленно при использовании scp или при использовании rsync в режиме демона, так что это не похоже на проблему, специфическую для rsync или ssh.
У меня также есть доступ к другому VPS (Linode), я получаю ожидаемую скорость передачи 2-3 МБ / с при передаче файлов с помощью rsync с этого VPS.
Кроме того, когда я передаю файлы с помощью rsync напрямую с Digital Ocean VPS на Linode VPS, я получаю нормальную скорость передачи между серверами 15 МБ / с. Сочетание этих факторов указывает на то, что ssh и rsync работают нормально на всех машинах.
На данный момент я обошел проблему, туннелировав ssh-соединение через Linode VPS, но мне любопытно, что может быть причиной очень низкой скорости передачи.
Когда вы говорите «в основном архивы размером 15 Мб», сколько там файлов меньшего размера? Вы постоянно видите медленную скорость или она выглядит быстрее на больших файлах? rsync (и почти любая другая операция файловой системы) медленнее при обработке большого количества маленьких файлов, чем меньшего количества больших, из-за накладных расходов файловой системы на открытие и закрытие каждого файла (и любых необходимых операций чтения / изменения каталога). Это может быть усугублено провайдерами VPS, которые обеспечивают справедливое (er) использование ввода-вывода путем регулирования операций ввода-вывода в секунду для каждой виртуальной машины до фиксированного максимального значения.
Чтобы проиллюстрировать это:
dd if=/dev/urandom of=/tmp/test.file bs=1024 count=102400
for i in
seq 1 10240; 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
Вы должны увидеть, что для файлов меньшего размера процесс идет намного медленнее, даже если совокупное содержимое одинакового размера. Так будет, даже если вы будете делать все локально, а не по сети вообще (хотя, очевидно, сеть несколько усилит эффект). На маленькой старой машине здесь time rsync * /location/on/another/local/drive/
дает real 0m0.683s, user 0m0.596s, sys 0m0.220s
для корпуса 1 * 100 МБ и real 0m38.793s, user 0m4.664s, sys 0m15.657s
для 102,400 * 1Кб - разница ~ 57х.