Почему scp такой медленный и как сделать его быстрее?

Окружение копируется в адресное пространство процесса при его создании. Изменения в среде влияют только на недавно запущенные процессы, вы не можете изменить среду запущенной программы извне.

Вам понадобится какой-то механизм межпроцессного взаимодействия (IPC) для того, чего вы пытаетесь достичь, или просто запишите новое значение в файл и попросите вашу программу опросить его содержимое.

63
23.10.2015, 16:34
2 ответа

Еще одна причина того, что scp работает медленнее, чем должна быть, особенно в сетях с высокой пропускной способностью, заключается в том, что он имеет статически определенные внутренние буферы управления потоком, которые в конечном итоге становятся узкими местами производительности сети.

HPN-SSH — это исправленная версия OpenSSH, которая увеличивает размер этих буферов. Это дает значительную разницу в скорости передачи scp (см. диаграммы на сайте, но я также говорю из личного опыта). Конечно, чтобы получить преимущества, вам нужно установить HPN-SSH на все ваши хосты, но это того стоит, если вам регулярно нужно передавать большие файлы.

7
27.01.2020, 19:32

Поскольку этот вопрос не так уж и стар, и никто больше не ссылался на это решение, я думаю, что оно уместно, поскольку оно увеличивает пропускную способность до максимального предела (10 МиБ/с в моем случае ), в отличие от scp, который составляет около 250 кбит/с, так что это ответ на ваш вопрос.

Фактически те же 250кб/с с rsync -хотя бы со спецификатором портаrclone -Avvp cap_* -e "ssh -p 1087 -i id_rsa" user@host:~/dir


Цитирование сообщения в списке рассылки openssh -unix -dev:

The scp protocol is outdated, inflexible and not readily fixed. Its authors recommend the use of more modern protocols like sftp and rsync for file transfer instead

Тот же синтаксис применяется к sftp, поэтому вместо scp text.txt user@hostтеперьsftp text.txt user@host(примеры использования scp взаимозаменяемы с sftp)

Также последняя версия OpenSSH должна активировать демон -, по крайней мере, в моем случае на сервере Arch Linux, но вам, возможно, придется установить пакет sftp в других дистрибутивах.


Еще один рабочий пример с флагом файла шифрования ssh (id _rsa )и нестандартным портом ssh 1087 вместо 22, чтобы сэкономить время на возню с синтаксисом:

sftp -P 1087 -i id_rsa user@server:/home/user/Downloads/Video/*/*.mp4 /home/user/Videos/

Также ваш sftp может быть ограничен 800 кбит/с или ~1 Мбит/с. Вы можете проверить это с помощью:

# sysctl -a | grep net.*rmem

и вы можете изменить пределы, например. вот так, если они слишком медленные:

   # sysctl -w net.ipv4.tcp_rmem='40960 873800 62914560'

   # sysctl -w net.core.rmem_max=8388608
2
27.01.2020, 19:32

Теги

Похожие вопросы