iperf3 —— 网络带宽与质量基准

运维工具手册 10-压测与基准 4.5 KB 原文

iperf3 —— 网络带宽与质量基准

分类:10 压测与基准 适用:Linux / macOS / Windows(iperf3 3.x) 一句话:两台机器之间到底能跑多少带宽、有没有丢包抖动,测一次就有答案。

1. 它解决什么问题

  • 专线标称 1Gbps,实际能到多少?
  • 跨机房延迟高、吞吐上不去,是带宽不够还是丢包?
  • 新上架的 10G/25G 网卡、交换机链路是否达标。
  • 云主机内网带宽是否符合规格。

2. 安装

apt install -y iperf3
dnf install -y iperf3
apk add iperf3
# Windows 从官网下载 iperf3.exe

3. 基本用法

服务端

iperf3 -s                       # 默认监听 5201
iperf3 -s -p 5202              # 指定端口
iperf3 -s -D                   # 后台运行(守护)
iperf3 -s -1                   # 接受一次测试后退出

客户端

iperf3 -c 10.0.0.5                      # TCP 默认 10 秒
iperf3 -c 10.0.0.5 -t 30                # 测 30 秒
iperf3 -c 10.0.0.5 -p 5202              # 指定端口
iperf3 -c 10.0.0.5 -P 8                 # 8 条并行流
iperf3 -c 10.0.0.5 -R                   # 反向:服务端发给客户端
iperf3 -c 10.0.0.5 --bidir              # 双向同时
iperf3 -c 10.0.0.5 -u -b 100M           # UDP,限速 100Mbps
iperf3 -c 10.0.0.5 -w 2M                # TCP 窗口 2MB
iperf3 -c 10.0.0.5 -i 1                 # 每秒输出一次
iperf3 -c 10.0.0.5 -J > result.json     # JSON 输出
iperf3 -c 10.0.0.5 --get-server-output  # 同时拿服务端结果

4. 结果怎么读

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   938 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.09 GBytes   938 Mbits/sec                  receiver
列 含义
Transfer 传输总量
Bitrate 带宽(bits,不是 Bytes)
Retr 重传次数(TCP)
sender / receiver 发送端 / 接收端视角

单位换算

938 Mbits/sec ÷ 8 ≈ 117 MB/s

千兆网卡实测 930~945 Mbits/sec 是正常的(协议开销)。

UDP 模式

iperf3 -c 10.0.0.5 -u -b 500M -t 20
[ ID] Interval      Transfer     Bitrate   Total Datagrams  Lost/Total  Loss%  Jitter
[  5]  0.00-20.00  1.16 GBytes   500 Mbits/sec  850000  120/850000  0.014%  0.045 ms
指标 意义
Lost/Total 丢包数
Loss% 丢包率,音频/视频/VoIP 关注
Jitter 抖动,实时业务关注

5. 判读标准

链路 期望吞吐 说明
1 Gbps 930~945 Mbps 千兆网卡
10 Gbps 9.2~9.4 Gbps 需多流 + 足够 CPU
25 Gbps 22~23 Gbps 需多流 + 大窗口
跨城专线 接近标称,延迟高 受 RTT 与窗口限制

吞吐上不去时依次排查:

  1. 单流受 TCP 窗口与 RTT 限制 → 加 -P(多流)。
  2. 网卡/交换机端口协商速率 → ethtool eth0 | grep Speed。
  3. CPU 软中断打满 → top 看 si、mpstat -P ALL 1。
  4. 中间设备限速/QoS → 查策略。
  5. 磁盘/内存拷贝瓶颈 → UDP 模式排除 TCP 因素。

6. 实战场景

6.1 验证专线/内网带宽

# A 机(服务端)
iperf3 -s -p 5201

# B 机(客户端)
iperf3 -c <A> -t 60 -P 8 -i 5
iperf3 -c <A> -t 60 -P 8 -R -i 5        # 反向

双向都测,因为上下行可能不对称。

6.2 测 10G 网络需要多流

iperf3 -c <server> -t 30 -P 16 -w 4M

单流在 10G 上通常只能跑到 3~5 Gbps,受窗口与 RTT 限制。

6.3 测丢包与抖动(UDP)

iperf3 -c <server> -u -b 200M -t 60 -i 5

Loss% 持续 >0.1% 说明链路有问题;Jitter >5ms 对实时业务有影响。

6.4 排查"带宽够但应用慢"

# 1. 裸带宽
iperf3 -c <server> -t 30 -P 8
# 2. 小包(模拟高频交易/游戏)
iperf3 -c <server> -u -b 10M -l 64 -t 30
# 3. 延迟
mtr -rwc 100 <server>

小包吞吐远低于大包 → PPS 能力不足(网卡/防火墙/内核参数)。

6.5 保存结果做对比

iperf3 -c <server> -t 30 -P 8 -J > /tmp/iperf-$(date +%F-%H%M).json
jq '.end.sum_sent.bits_per_second / 1e9' /tmp/iperf-*.json

6.6 指定源 IP / 多网卡

iperf3 -c <server> -B 10.0.0.11          # 绑定源地址
iperf3 -c <server6> -6                   # IPv6

7. 常见坑

  1. 单位混淆:Mbits/sec 是比特,除以 8 才是 MB/s。云厂商带宽按 Mbps 卖。
  2. 单流测不出万兆:必须 -P 8 以上。
  3. 防火墙未放行 5201:客户端报 Connection refused 或一直重连。
  4. 服务端只跑单实例:多客户端并发测试要 iperf3 -s 多次或不同端口。
  5. -R 方向搞反:-R 是服务端发、客户端收,测下行带宽。
  6. UDP 不限速:-u 不带 -b 会全速发包,打爆链路。
  7. CPU 瓶颈:高速率下单核软中断打满,mpstat -P ALL 1 看 %soft。
  8. 测试时间太短:-t 5 包含 TCP 慢启动,结果偏低,至少 30s。
  9. 跨公网测:受运营商 QoS 影响,结果不代表内网能力。
  10. 云环境安全组:入方向要放行 5201,别只放行 ICMP。
  11. -w 设太大:超过 net.core.rmem_max 会报警告,需同步调内核参数。
  12. JSON 字段版本差异:不同 iperf3 版本的 end.sum_sent 结构略有不同,脚本要做兼容。

8. 配套内核调优(高速率场景)

sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"
sysctl -w net.core.somaxconn=65535

查看网卡速率与丢包:

ethtool eth0 | grep -E 'Speed|Duplex'
ethtool -S eth0 | grep -i -E 'err|drop|discard'
ip -s link show eth0

9. 速查表

# 服务端
iperf3 -s
iperf3 -s -p 5202 -D

# TCP
iperf3 -c <ip> -t 30
iperf3 -c <ip> -t 30 -P 8
iperf3 -c <ip> -t 30 -P 8 -R
iperf3 -c <ip> --bidir -t 30
iperf3 -c <ip> -w 2M -P 4
iperf3 -c <ip> -B 10.0.0.11

# UDP
iperf3 -c <ip> -u -b 200M -t 30
iperf3 -c <ip> -u -b 10M -l 64 -t 30      # 小包/PPS

# 输出
iperf3 -c <ip> -J > r.json
iperf3 -c <ip> -i 1 --get-server-output

# 判读
Bitrate(Mbits/sec)/8 = MB/s
Retr 高 → 丢包/拥塞
Loss% >0.1 或 Jitter >5ms → 链路质量问题