4. iPerf3 高级技巧:多线程测试、反向测试、双向测试、带宽测试报告解读

各位好,我是老张。这一章咱们来点硬核的。iPerf3 的基本用法,说白了就是一条命令跑个单线程。但真实的生产环境,哪有这么简单?你想想看,一台服务器要同时服务几百个客户端,单线程测出来的带宽,根本就是「理想国」的数据。

我个人习惯,做性能测试从来不用默认参数。为什么?因为默认参数测出来的结果,往往只能骗骗外行。今天我就把压箱底的高级玩法掏出来,咱们一个一个说。

4.1 多线程测试:模拟真实并发

单线程测试,就像一个人搬砖。多线程测试,就是叫上一队人一起搬。道理很简单,但很多人用错了。

核心参数:-P(大写P)

这个参数指定并发线程数。注意,不是连接数,是线程数。

# 服务端(不变)
iperf3 -s

# 客户端:启动 4 个线程同时发数据
iperf3 -c 192.168.1.100 -P 4 -t 30

我在项目中遇到过一个问题:某次给一家视频平台做压测,单线程能跑到 900Mbps,但一开 4 线程,总带宽反而掉到 600Mbps。排查了半天,发现是客户端的 CPU 瓶颈了。多线程虽然能压满带宽,但也会吃掉 CPU 资源。

避坑指南:

我曾经见过有人把 -P 设成 64,结果服务器直接挂了。线程数不是越多越好。一般建议:

  • 千兆网络:2-4 线程足够
  • 万兆网络:8-16 线程起步
  • 超过 32 线程,先看看 CPU 能不能扛住

4.2 反向测试:测服务器的上行能力

默认情况下,iPerf3 是客户端发数据,服务端收数据。但很多时候,我们需要测服务端的上行带宽。比如,你的服务器要给用户推送视频流。

这时候就要用反向测试了。

# 客户端:使用 -R 参数
iperf3 -c 192.168.1.100 -R -t 30

加了 -R 之后,数据流方向就反过来了。服务端变成发送方,客户端变成接收方。嗯,这里要注意:反向测试的结果,往往和正向不一样。为什么?因为服务器的网卡驱动、TCP 栈优化,通常对发送和接收的处理能力是不同的。

我记得有一次帮客户排查云服务器带宽问题。正向测试能跑到 1.2Gbps,反向测试只有 400Mbps。客户说「我的服务器上行慢」。其实不是慢,是云服务商对上行带宽做了限速。用 -R 一测,真相大白。

4.3 双向测试:同时测上下行

反向测试虽然能测上行,但它是串行的——先测完一个方向,再测另一个。如果你想要同时测上下行,就得用双向测试。

# 客户端:使用 --bidir 参数
iperf3 -c 192.168.1.100 --bidir -t 30

这个参数一加,iPerf3 会在同一个连接里同时跑两个方向的流量。结果会分别显示上行和下行的带宽。

个人经验:

双向测试对设备压力很大。我曾经用一台低配的 ARM 开发板做双向测试,结果直接死机了。建议先跑一次单向,确认设备能扛住,再上双向。

4.4 带宽测试报告解读:别只看最后一行

很多人跑完 iPerf3,只看最后一行「SUM」的总带宽。这其实是个大坑。真正的信息,藏在中间那些细节里。

我们来看一份典型的测试报告:

-----------------------------------------------------------
Interval           Transfer     Bitrate         Retr
-----------------------------------------------------------
0.00-1.00   sec   112 MBytes   940 Mbits/sec    0
1.00-2.00   sec   113 MBytes   948 Mbits/sec    0
2.00-3.00   sec   110 MBytes   923 Mbits/sec    1
3.00-4.00   sec   108 MBytes   906 Mbits/sec    3
4.00-5.00   sec   105 MBytes   881 Mbits/sec    5
5.00-6.00   sec   102 MBytes   856 Mbits/sec    8
6.00-7.00   sec   98  MBytes   822 Mbits/sec    12
7.00-8.00   sec   95  MBytes   797 Mbits/sec    15
8.00-9.00   sec   92  MBytes   772 Mbits/sec    18
9.00-10.00  sec   90  MBytes   755 Mbits/sec    20
-----------------------------------------------------------
[SUM]   0.00-10.00  sec  1.02 GBytes   860 Mbits/sec  sender
[SUM]   0.00-10.00  sec  1.01 GBytes   855 Mbits/sec  receiver
-----------------------------------------------------------

你看,SUM 行显示平均带宽是 860Mbps。但仔细看每一秒的数据,从第 3 秒开始,带宽就在持续下降,重传(Retr)在不断增加。这说明什么?说明网络有瓶颈,可能是缓冲区满了,或者中间设备丢包了。

报告解读要点:

  • 看趋势:带宽是平稳的,还是持续下降的?下降说明有问题。
  • 看重传:Retr 列的数字,0 是理想状态。超过 5 就要警惕了。
  • 看抖动:相邻两秒的带宽波动超过 10%,说明网络不稳定。
  • 看对称性:sender 和 receiver 的带宽差距大,说明有丢包或拥塞。

我个人的习惯是,每次测试至少跑 30 秒,然后取中间 20 秒的数据做分析。前 5 秒是 TCP 慢启动阶段,数据不稳定。后 5 秒可能有结束时的波动。中间段才是最真实的。

曾经踩过的坑:

有一次我测一个跨洋链路,SUM 显示 200Mbps,看起来不错。但仔细看每一秒的数据,发现带宽在 50Mbps 到 350Mbps 之间剧烈抖动。这种网络,做视频会议肯定卡成 PPT。只看 SUM 的话,根本发现不了这个问题。

4.5 本章知识体系

为了让你更直观地理解这些高级技巧之间的关系,我画了一张图:

iPerf3 高级技巧知识体系 iPerf3 高级测试 多线程测试 (-P) 反向测试 (-R) 双向测试 (--bidir) 报告解读 模拟并发 CPU 瓶颈 上行带宽 方向反转 同时上下行 设备压力大 看趋势/重传 核心原则:不要只看 SUM,要逐秒分析 多线程 + 反向 + 双向 = 全面覆盖

这张图把四个高级技巧串起来了。多线程解决并发问题,反向和双向解决方向问题,报告解读解决结果分析问题。四者缺一不可。

好了,这一章的内容就到这里。记住,工具是死的,人是活的。同样的 iPerf3,在不同人手里,能测出完全不同的结果。关键就在于你会不会用这些高级技巧。

最后一个小建议:

每次测试前,先想清楚你要测什么。是测带宽上限?还是测稳定性?还是测双向性能?目标不同,参数组合也不同。别上来就一顿乱敲命令。

可可精品资料库