买服务器时,带宽参数写得明明白白:内网 1Gbps、公网 10Mbps。但你有没有想过,这条链路实际能跑多少?标称值只是理论上限,真实吞吐受网卡速率、交换机、CPU 处理能力、链路拥塞、跨境路由等一堆因素影响。很多"网络慢"的故障,最后定位到的是带宽跑不满、丢包重传,而不是应用本身。
这篇文章讲清楚服务器网络吞吐量怎么测。内容包括:为什么要单独测网络、iperf3 怎么在两套发行版上部署、服务端和客户端命令怎么写、-P/-t/-R/-u 这些参数什么意思、测出来的带宽/重传/丢包怎么看、以及有哪些容易踩的坑。文中带宽数字为经验量级,实际受硬件和链路影响,以你实测为准。
一、为什么要单独测网络吞吐
1. 标称带宽不等于实际可用
- 单位换算的误导:1Gbps 换算成字节是约 125MB/s(1 字节 8 比特),加上协议开销,实测能到 110~118MB/s 就算不错。很多人在 100Mbps 口上期待 100MB/s,这是量级错误。
- 端口速率是上限:千兆网卡上限 1Gbps(约 940Mbps 实测、125MB/s 左右),万兆口上限 10Gbps。
- 全双工与否:老式误配成半双工会让吞吐腰斩。
2. 内网带宽和公网带宽是两回事
云服务器的"内网带宽"通常很高(千兆或万兆),用于同机房互通;"公网带宽"才是你买的那几 Mbps,用于进出互联网。测的时候要分清测的是哪条链路。
3. 吞吐直接决定业务体验
文件下载、视频、图片站、大文件同步、备份、跨机房复制,这些业务的瓶颈往往是带宽而不是 CPU 或磁盘。测出真实吞吐,才能判断该不该升带宽、该不该换线路。
二、iperf3 部署
iperf3 是被测机和测试机都要装的工具,通常一台做服务端、一台做客户端。
# RHEL / CentOS / Rocky / AlmaLinux(iperf3 在 EPEL)
sudo dnf install -y epel-release
sudo dnf install -y iperf3
# 老版本 CentOS 7
sudo yum install -y epel-release && sudo yum install -y iperf3
# Debian / Ubuntu
sudo apt update && sudo apt install -y iperf3
装完用 iperf3 -v 确认版本一致,两端版本差异过大有时会握手异常。iperf3 默认使用 TCP 5201 端口。如果服务端有防火墙,需要放行:
# firewalld(RHEL 系)
sudo firewall-cmd --add-port=5201/tcp --permanent
sudo firewall-cmd --reload
# 仅建议在测试期间临时放行;测试完可移除:
# sudo firewall-cmd --remove-port=5201/tcp --permanent && sudo firewall-cmd --reload
# ufw(Ubuntu)
sudo ufw allow 5201/tcp
# 回滚:sudo ufw delete allow 5201/tcp
风险提示:放行端口意味着该端口对网络开放,测试环境之外请限定来源 IP,或测试完立即收回。
三、服务端与客户端命令
服务端:一条命令即可
在被测机上启动服务端:
# 前台启动,默认监听 5201
iperf3 -s
# 指定端口和绑定地址
iperf3 -s -p 5201 -B 0.0.0.0
客户端:常用参数组合
# 基础:测试到服务端的 TCP 吞吐
iperf3 -c 10.0.0.2
# 并发 4 条流,跑 30 秒
iperf3 -c 10.0.0.2 -P 4 -t 30
# 反向测试(服务器发、客户端收),用于测下行
iperf3 -c 10.0.0.2 -R -t 30
# UDP 测试,指定目标带宽多少 Mbps,看丢包和抖动
iperf3 -c 10.0.0.2 -u -b 100M -t 30
# 每 1 秒输出一次明细
iperf3 -c 10.0.0.2 -P 4 -t 30 -i 1
参数含义:
| 参数 | 作用 |
|---|---|
-c |
客户端模式,指定服务端 IP |
-s |
服务端模式 |
-P |
并发流数量,默认 1 |
-t |
测试时长(秒) |
-R |
反向,服务端发客户端收 |
-u |
使用 UDP(配合 -b 指定带宽) |
-b |
目标带宽,如 100M、1G |
-i |
输出间隔 |
四、结果解读
TCP 测试的典型输出:
[ ID] Interval Transfer Bitrate Retr
[SUM] 0.00-30.00 sec 3.35 GBytes 959 Mbits/sec 12 sender
[SUM] 0.00-30.00 sec 3.35 GBytes 959 Mbits/sec receiver
重点看三处:
- Bitrate:实测吞吐。跟标称带宽对比——千兆口跑到 940Mbps 左右、万兆口跑到 9.4Gbps 左右,就说明链路基本跑满,属正常。
- Retr(重传):TCP 重传次数。为 0 或个位数量级正常;上万甚至更多,说明链路有丢包或拥塞,实际有效吞吐会打折。
- sender / receiver 两行是否一致:差距大说明收发不平衡,可能有丢包或缓冲问题。
UDP 测试的典型输出:
[SUM] 0.00-30.00 sec 357 MBytes 100 Mbits/sec 0.031 ms 0/254444 (0%)
UDP 会多出 Jitter(抖动) 和 丢包率(Lost/Total)。抖动大、丢包高,说明链路不稳定,对实时类业务(语音、视频、游戏)影响大。UDP 不是可靠传输,可以简单理解为:你让它发 100M,它照发,丢不丢看链路。
五、对照标称带宽
把实测和标称放一起判断:
| 实测/标称 | 判断 | 常见原因 |
|---|---|---|
| ≥ 90% | 正常,链路跑满 | 无 |
| 60%~90% | 基本正常,偏弱 | 单流受限、CPU 或中断不够 |
| 30%~60% | 偏低需排查 | 并发不足、网卡协商异常、有重传 |
| < 30% | 明显异常 | 链路问题、限速、误配、跨境拥塞 |
几个经验值参考:
- 千兆网卡实测约 940Mbps,万兆约 9.4Gbps,属于理想状态。
- 云服务器公网带宽若买 5Mbps,实测能稳定跑到 5Mbps 上下就算达标,跑不满要查是否被限速或有丢包。
- 跨境链路受路由影响大,白天和晚高峰差别可能很明显,测试时间点要覆盖业务高峰。
六、注意事项:别让测试机自己成瓶颈
这是最容易被忽略的一点:iperf3 跑满高带宽本身很吃 CPU 和中断。
- 单流跑不满不一定是链路问题。TCP 单流受窗口、RTT 限制,长肥管道(高带宽高延迟)上单流很难跑满。加大
-P并发往往就能上去,说明是单流限制而非链路。 - 两端 CPU 要够。万兆口跑满时,单核可能被打满,
%soft(软中断)飙高。可以在两端用top看sy、si占用,必要时启用多队列、调整网卡中断亲和性。 - 网卡速率要确认。用
ethtool看协商结果:
ethtool eth0 | grep -i speed
# 输出 Speed: 10000Mb/s 表示万兆
- 两端网卡速率要对等。一端千兆一端万兆,实际按千兆走。
- 磁盘不要参与。iperf3 测的是网络,不落盘,但别同时跑磁盘压测干扰。
- 测完关掉服务端。
iperf3 -s长开无必要,测完Ctrl+C或kill掉,避免端口长期暴露。 - 多测几轮取稳定值。网络抖动大,单次结果不可靠,跑 3 轮以上看是否稳定。
七、按场景组织测试
不同的测试目的,方案不一样,别一套参数测所有情况。
测内网带宽:两台同机房机器互测,直接 iperf3 -c,一般能跑到网卡速率附近。这是验证交换机、网卡、链路是否正常的基线。
测公网/跨境链路:选业务高峰时段,用 -P 多流测,并配合 -R 对比去程和回程。跨境链路去回程差异可能很大,单看一个方向会误判。
测 UDP 承载质量:语音、视频、游戏类业务跑 UDP,可以用 -u -b 从小带宽往上加,观察丢包和抖动随带宽上升的变化,找到"开始明显丢包"的临界点,这个点就是该链路对 UDP 的实际可用带宽。
测长连接稳定性:用 -t 300(跑 5 分钟)或更长,看 Bitrate 是否随时间衰减、Retr 是否累积上升。短测正常、长测劣化,往往说明中间设备有流控或拥塞。
测多机聚合:一台客户端打不满时,用多台客户端同时打同一个服务端,或服务端开多个实例分别压,验证是单机瓶颈还是链路瓶颈。
# 长时稳定性测试:跑 5 分钟,每秒输出,观察是否衰减
iperf3 -c 10.0.0.2 -P 4 -t 300 -i 1
# 打印 JSON 结果,便于脚本化采集和对比
iperf3 -c 10.0.0.2 -P 4 -t 30 --json > iperf_result.json
用 --json 输出后,可以把多轮结果存下来做趋势对比,比肉眼看数字靠谱。
八、把测试结果和业务对上
测出吞吐只是第一步,还要回答"这对业务够不够"。简单换算:
- 单请求平均响应体大小 × QPS = 所需带宽。比如接口平均返回 100KB、QPS 500,那大约需要 500 × 100KB = 50MB/s ≈ 400Mbps。
- 文件下载站按"并发下载数 × 单用户限速"估总带宽。
- 备份、跨机房复制按"数据量 ÷ 允许时长"估所需带宽。
如果实测吞吐远高于业务需求,说明带宽不是当前瓶颈,可以把精力放在 CPU 或磁盘上;如果实测吞吐已经贴着业务峰值,就该规划升带宽或加线路了。
常见问题
Q1:iperf3 和 speedtest 有什么区别?
iperf3 点对点测两台机器之间的吞吐,适合内网、专线、机房间测;speedtest 测到你所在地到测速服务器的公网带宽。目的不同,iperf3 更可控、更适合排查。
Q2:为什么 -P 1 跑不满,-P 4 就上去了?
单条 TCP 流受窗口和 RTT 限制,高延迟链路上单流吞吐有上限。加并发流能填满带宽,说明瓶颈在单流,不是链路本身。
Q3:Retr 很高说明什么?
说明有丢包触发重传,实际有效吞吐会下降。检查链路质量、交换机、是否拥塞,跨境链路晚高峰尤其常见。
Q4:UDP 测试丢包很高正常吗?
要看你设的带宽。如果 -b 设得超过链路实际能力,丢包是必然的。适当降低 -b 再看,若仍大量丢包则是链路问题。
Q5:内网测试很快,公网很慢,怎么回事?
内网走机房交换机,公网走运营商链路,二者独立。公网慢一般和购买带宽、出口拥塞、跨境路由有关,需要分别评估。
总结
- 网络吞吐要单独测,标称带宽是上限不是承诺,千兆实测约 940Mbps、万兆约 9.4Gbps(经验值)。
- iperf3 两端都装:RHEL 系
dnf/yum install iperf3(需 EPEL),Debian/Ubuntuapt install iperf3。 - 服务端
iperf3 -s,客户端iperf3 -c,用-P加并发、-t定时长、-R测反向、-u -b测 UDP。 - 解读看 Bitrate(吞吐)、Retr(重传)、Jitter 和丢包;和标称带宽对比,跑满 90% 以上算正常。
- 别让测试机自己成瓶颈:确认网卡速率、两端 CPU 够用、必要时加并发流、多测几轮,测完收好端口。
企业QQ咨询




