我发现一个 shell 命令可以向目标主机发送大量数据:
dd if=/dev/zero bs=4096 count=1048576 | ssh user@ip 'cat > /dev/null'
我想我可以用它来测试网络带宽,但它不能显示进程状态。
答案1
好吧,如果你把这整个事情包装起来time
:
time sh -c "dd if=/dev/zero bs=4096 count=1048576 | ssh user@ip 'cat > /dev/null'"
这将给出传输完成所需的时间。将传输的字节数除以时间,这就是您的吞吐量。
对于进度表,您可以使用光伏,这样就不需要使用时间(1)了:
dd if=/dev/zero bs=1024 count=10000 | pv --size 10240000 | ssh user@ip 'cat > /dev/null'
这将为您提供一个很好的进度表,特别是当您使用--size
传输的总大小加载参数时。
答案2
如果您想要测试网络带宽,还有更直接的方法可以做到。
试用ttcp
或其替代品:nuttcp
[tla ~]$ nuttcp -S
michael@challenger:~$ nuttcp -4 -r tla
41.5574 MB / 10.46 sec = 33.3336 Mbps 2 %TX 4 %RX
michael@challenger:~$ nuttcp -4 -t tla
15.4347 MB / 10.13 sec = 12.7821 Mbps 1 %TX 2 %RX 0 retrans 3.30 msRTT
答案3
发送SIGUSR1
到dd
将导致它输出其进度。您可以计算后续调用之间的差异以获得近似速率。
答案4
通常最好使用 iperf 来测试带宽,因为它没有加密开销,但你可以插入光伏在 dd 和 ssh 之间实时查看传输速度:
dd if=/dev/random | pv | ssh somehost 'cat > /dev/null'
另外,在 FreeBSD 上,你可以通过按 Ctrl+T 向 dd 发送 SIGINFO,之后会显示一些统计数据(包括速度)