本页目录 8 个章节
每台服务器都拥有独享的 10 Gbps 端口。本指南介绍如何正确测量端口速度、为什么某些测试结果偏低,以及在怀疑存在问题时应向技术支持提供哪些信息。您需要 root 访问权限,以及另一台服务器或附近的公共 iperf3 服务器。
预期结果
使用标准的 1,500 字节数据包时,10 Gbps 链路最多可承载约 9.4 Gbps 的 TCP 数据;其余带宽被协议头占用。您的端口不与任何人共享,但与任何网络一样,端口之外的上行链路是共享的。因此,实际吞吐量还取决于到达对端的路由以及对端本身。
为什么单流测试或远距离服务器的结果偏低
单个 TCP 连接在每个往返周期内发送的数据量不能超过其窗口大小。在往返时间为 100 ms 时,要跑满 10 Gbps,需要有 125 MB 数据处于传输中,远超 Linux 默认的缓冲区上限。此外,每丢失一个数据包都会使连接在多个往返周期内减速,距离越远影响越大。使用多个并行流可以掩盖这两种限制。
公共测试服务器本身也有限制:许多服务器只有 1 或 10 Gbps 端口,并由同一时间进行测试的所有人共享。到另一个大洲的单流测试,更多反映的是路径状况,而非您的端口。
使用 iperf3 测试
使用 sudo apt install iperf3 或 sudo dnf install iperf3 安装 iperf3。从公共 iperf3 服务器列表中选择一台离您的服务器所在地较近的服务器,记下其端口,然后使用八个并行流测试两个方向:
iperf3 -c <iperf-server> -p 5201 -P 8 -t 30 -O 3 # your server sends
iperf3 -c <iperf-server> -p 5201 -P 8 -t 30 -O 3 -R # your server receives
-P 8 打开八个流,-t 30 运行 30 秒,-O 3 忽略 TCP 加速阶段的前三秒,-R 反转测试方向。--bidir 可同时测试两个方向。
iperf3 3.16 及更高版本会为每个流使用独立线程。较旧的版本(例如 Debian 12 以及 AlmaLinux 或 Rocky Linux 9 自带的版本)在单个 CPU 核心上处理所有流。如果 top 显示 iperf3 占用了单核的 100%,请针对不同端口运行两到三个实例;许多公共服务器接受 5200–5209 这样的端口范围。
在您的两台服务器之间测试
干扰最少的测试是在您控制的两台服务器之间进行。在服务器 A 上启动一个完成一次测试后即退出的 iperf3 服务端;在服务器 B 上连接它:
iperf3 -s -1 # on server A
iperf3 -c 203.0.113.10 -P 8 -t 30 -O 3 # on server B
测试时在服务器 A 的防火墙中开放 TCP 端口 5201,测试结束后再关闭。位于同一机房的两台服务器测试的是端口本身;位于不同机房的服务器测试的是它们之间的路径。
使用 Speedtest CLI 测试
Ookla 的 Speedtest 以全球各地互联网服务商运营的服务器为测试对象。请从 speedtest.net/apps/cli 安装官方 CLI,而不是旧的、非官方的 speedtest-cli Python 包。然后运行:
speedtest --accept-license -L # list nearby servers
speedtest --accept-license -s 12345 # test against a server ID from that list
Speedtest 服务器的容量差异很大,因此请先尝试两到三台服务器,再下结论。
针对远距离传输优化 Linux
更大的 TCP 缓冲区可让每个连接保持更多数据处于传输中。请将以下设置保存为 /etc/sysctl.d/90-network-tuning.conf:
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
net.ipv4.tcp_mtu_probing = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
使用 sudo sysctl --system 加载这些设置。缓冲区大小遵循 ESnet 的建议,适用于路径延迟最高 100 ms 的 10 Gbps 主机,同样适用于 IPv6。在长路径上,BBR 通常比默认的 CUBIC 更能应对丢包;如需保留 CUBIC,请删除最后一行。使用 sysctl net.ipv4.tcp_congestion_control 检查结果。
解读测试结果
[SUM] 0.00-30.00 sec 32.8 GBytes 9.39 Gbits/sec 112 sender
[SUM] 0.00-30.00 sec 32.8 GBytes 9.38 Gbits/sec receiver
- 请看 receiver 行:它统计的是实际到达的数据。
- sender 行中速率后面的数字表示 TCP 重传次数。在互联网路径上出现少量重传是正常的;如果重传达数千次且速率偏低,则说明存在丢包。
- 速率以比特为单位。除以 8 即可换算为字节:9.4 Gbit/s 约等于 1.17 GB/s。
- 如果结果随时段变化,或在不同测试目标之间差异很大,则瓶颈在于路径或对端,而不是您的端口。
报告问题
如果在您自己的服务器之间,或到附近多个目标的测试结果始终远低于预期,请在客户中心提交工单,并附上:
- 您服务器的 IP 地址和测试目标;
- 完整的 iperf3 命令及输出,并注明每次测试的时间(UTC);
- 双向的 mtr 报告:从您的服务器到目标,以及从目标(或从您自己的网络)回到您的服务器。
mtr -rwbzc 100 <target-ip>
使用 sudo apt install mtr-tiny 或 sudo dnf install mtr 安装 mtr。互联网路由往往是不对称的:回程路径可能与去程路径不同,因此仅凭单向结果很难了解全貌。如果丢包只出现在某一跳,而没有延续到最后一跳,通常是路由器对自身的响应进行了限速,而非真正的丢包。



