我有两台 Debian Linux 机器通过 1 Gbit LAN 连接。我可以用原始 HTTP 文件传输来测量这一点,双向传输速度wget
约为 100MB/s。
当我现在使用时scp
,我得到的无压缩最大值约为15MB/秒。使用-C
标志启用压缩后,根据内容,最多可以50MB/秒。
不过,还是有一个很多看来带宽在这里被浪费了。很长时间我都没有在意,直到我真的不得不考虑一些非常大的日志文件传输时才意识到它有多慢scp
。对我来说,使用 是理所当然的scp
,即使在公司环境中,因为所有基础设施都是为它设置的。
是什么限制了 scp 的性能?它是否因为加密而限制了 CPU?当我使用htop
它时,它似乎没有使用多核 CPU,只有四个 CPU 中的一个达到最大值。
有没有办法增加吞吐量?我有 HTTP 服务器和 Samba,但在 Linux 机器之间移动文件时,我通常只使用 SSH,这是我成长过程中使用的方式。但现在这让我开始思考,似乎我需要考虑其他传输大量数据的方式。
HTTP 仅用于 PHP/Java/whatever 中的特定应用程序,而 samba 用于我们需要从 Windows 机器访问的某些特殊原因。
答案1
可能是加密的问题。您可以尝试使用不同的密码进行 scp,例如:
scp -c arcfour src dest
查看 ssh_config 手册页以了解可用的密码。RC4(arcfour)是一种快速密码,但可能不如某些替代密码安全。
答案2
部分原因可能与 OpenSSH 的内部实现有关。请查看抗凝血酶对于瓶颈的原因之一,给出一个合理的解释,并对 OpenSSH 进行补丁以解决这个问题(如果您愿意从源代码进行修补和重建)。