当你需要知道两台服务器之间,或者服务器与本地机房之间的真实网络带宽时,iperf3 是必须掌握的工具。它需要一端作为服务端,另一端作为客户端。
1. 安装 iperf3
在参与测试的两台Linux服务器上都安装 iperf3。
# Ubuntu/Debian
sudo apt install iperf3
# CentOS/RHEL
sudo yum install iperf3
2. 在服务端启动监听
在作为接收端的服务器A上,运行以下命令,让它开始监听连接:
bash
iperf3 -s
服务端会一直运行,等待客户端连接。用 Ctrl + C 可以终止它。
3. 在客户端发起测试
在作为发送端的服务器B上,运行命令连接到服务端A的IP地址:
bash
iperf3 -c <服务器A的IP地址>
默认会进行10秒的TCP带宽测试,并在结束后输出结果,其中 Bandwidth 就是测得的带宽
4. 常用测试选项
iperf3 支持很多参数,可以满足不同测试需求:
bash
iperf3 -c -t 30 # 测试30秒
iperf3 -c -P 4 # 使用4个并发线程进行测试
iperf3 -c -u # 改为测试UDP带宽(默认是TCP)
iperf3 -c -R # 测试反向带宽(从服务端到客户端)
在 iperf3 中,使用 -p 参数(小写)来指定端口。
服务端和客户端的端口号必须一致,否则无法通信。
服务端指定端口
在服务端启动监听时,加上 -p 参数:
iperf3 -s -p 5201
客户端连接时需指定相同端口
客户端发起测试时,也使用 -p 参数指定相同的端口号:
iperf3 -c <服务端IP> -p 5201
完整示例
场景:服务端 IP 为 192.168.1.100,使用端口 9999
服务端(192.168.1.100):
iperf3 -s -p 9999
输出会显示:
-----------------------------------------------------------
Server listening on 9999 (test #1)
-----------------------------------------------------------
客户端:
bash
iperf3 -c 192.168.1.100 -p 9999
客户端将连接到服务端的 9999 端口进行测试。
补充:查看默认端口
如果不指定端口,iperf3 默认使用 5201。你可以用以下命令验证服务端是否在监听:
sudo netstat -tulnp | grep iperf3
或
bash
sudo ss -tulnp | grep iperf3
这样就能看到 iperf3 进程正在监听的端口号了。
实时查看流量与排查问题
当感觉服务器网络异常时,用这些工具可以快速定位问题。
-
nload: 以清晰的图表显示每个网卡的实时入站和出站流量总量,一目了然
-
iftop: 类似 top 命令,显示各个网络连接的实时流量排名,能快速发现是哪个IP在大量占用带宽
-
nethogs: 按进程(PID)显示网络流量,能精确找到是哪个应用程序在“偷跑”带宽