![使用 rsync 从存储空间有限的服务器测试网络传输速度](https://linux22.com/image/787342/%E4%BD%BF%E7%94%A8%20rsync%20%E4%BB%8E%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%E6%9C%89%E9%99%90%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B5%8B%E8%AF%95%E7%BD%91%E7%BB%9C%E4%BC%A0%E8%BE%93%E9%80%9F%E5%BA%A6.png)
我想测试从服务器 A 到服务器 B 的传输速度,但服务器 A 的磁盘空间有限(<50GB),而且由于同一数据中心内的网络速度很快,因此传输 50 GB 可能太快而不能用作基准。服务器 B 的磁盘空间基本上是无限的。
有没有办法从服务器 A 传输“文件”(例如,作为服务器 A 无法容纳的大型数据流,例如 1 TB)以便我可以反复测试到服务器 B 的网络传输速度?
一种选择是从服务器 B 传输到服务器 A,并将文件直接放入/dev/null
,虽然我还没有测试过这个,而且我更喜欢服务器 A 而不是 B,因为服务器 A 只有 ssh 密钥而服务器 B 允许通过密码进行 ssh。
答案1
要测试原始网络带宽,可以使用iperf
(或iperf3
)。您可以使用以下简单的方法:
- 在服务器上:
iperf -s
- 在客户端中:
iperf -c <server_ip>
- 然后,反转服务器和客户端角色
为了测试rsync
传输速率,它通常受 SSH 加密/解密速度的限制,您可以创建一个稀疏源文件并将其同步到远程端。稀疏文件是指名义大小比实际分配大小更大的文件。您可以通过命令创建它truncate
。
例如,truncate --size=1T src.img
将创建一个 1 TB 大的文件,它实际上分配 0 字节(或最多一个 512/4K 块,取决于文件系统) - 即:
root@localhost:~# du -hs --apparent-size src.img
1.0T src.img
root@localhost:~# du -hs src.img
0 src.img
root@localhost:~# stat src.img
File: src.img
Size: 1099511627776 Blocks: 0 IO Block: 4096 regular file
读取和传输此类文件时,除非使用支持稀疏文件复制的实用程序和/或压缩程序(如gzip
)进行处理,否则文件将扩展为真实的标称大小。使用()和( )选项rsync
时可以“重新压缩”此类文件,但如果您省略它们,它将很乐意传输和写入整个 1 TB 的数据。-S
--sparse
-z
--compress
笔记: -z
将在传输过程中取消零,同时-S
在目标文件中将它们写入为空洞。
答案2
我会改用网络带宽监控工具,例如 iperf3。您可以在任何主机上运行它的服务器实例,然后从客户端决定要测量哪个方向的带宽。
在其中一台主机上将其用作服务器运行:
iperf3 --server
它将默认监听端口 5201/tcp,因此需要从其他主机允许。
在另一台机器上以最简单的形式测试 TCP 上的上行带宽:
iperf3 --client serveraddr
其中 serveraddr 是运行 iperf3 服务器的机器的 ip 地址(或主机名或 fqdn)。
要测试客户端的下行带宽,请执行以下操作:
iperf3 --client serveraddr --reverse
两个方向:
iperf3 --client serveraddr --bidir
iperf3 有大量选项可以调整应传输多少数据、使用哪种协议和端口等,并且您可以在服务器端对其进行“守护进程化”,以使其始终在后台监听客户端连接...man iperf3
是您的朋友:-)
iperf3 是开源的,它在大多数发行版中都可用,并且还有可供下载的二进制文件,例如 Windows 和 MacOS
我发现它非常可靠(至少在 Linux 上),并且我一直使用它,不仅可以测量吞吐量,还可以查看哪里有数据包丢失等等。