了解搬瓦工 VPS 的真实网络状况,是排查访问慢、丢包等问题的第一步。本文介绍三类常用的网络测速与诊断工具:测速工具(speedtest-cli)、点对点吞吐量测试(iperf3)以及丢包与路由追踪(mtr/ping)。掌握这些工具,你就能快速定位瓶颈在哪里——是 VPS 带宽不足、中间线路拥塞,还是目标端的问题。

本文要点

  • speedtest-cli 快速测出 VPS 到 Speedtest 节点的上下行带宽
  • iperf3 可在两台服务器间测试真实传输速率
  • mtr 结合 ping 和 traceroute,能定位丢包发生在哪一跳
  • 读懂测试报告,分清带宽瓶颈与路由问题

用 speedtest-cli 测带宽

speedtest-cli 是 Speedtest.net 的命令行客户端,可在服务器上直接测速,无需图形界面:

# Debian/Ubuntu 安装
apt install -y speedtest-cli

# 或使用 pip 安装最新版
pip3 install speedtest-cli

# 运行测速(自动选最近节点)
speedtest-cli

# 列出可用测速节点
speedtest-cli --list

# 指定节点 ID 测速(更精准)
speedtest-cli --server 节点ID

# 输出简洁结果
speedtest-cli --simple
输出项含义参考标准
Download下行带宽应接近套餐标称带宽
Upload上行带宽通常低于下行
Ping到测速节点延迟<50ms 优秀,50-100ms 良好

带宽只是参考

speedtest-cli 测的是 VPS 到某个 Speedtest 节点的速度,并非你访问自己网站的实际速度。真实用户体验还受中间网络路径、CDN、服务器负载等多重因素影响。

用 iperf3 做点对点测试

iperf3 需要一台服务端(另一台 VPS 或本地机器)和一台客户端,能测出两点之间的真实 TCP/UDP 吞吐量:

# 安装 iperf3
apt install -y iperf3   # Debian/Ubuntu
yum install -y iperf3   # CentOS/AlmaLinux

# -------- 在服务端运行 --------
iperf3 -s
# 默认监听 5201 端口(防火墙需放行)

# -------- 在客户端运行 --------
iperf3 -c 服务端IP

# 测试 UDP 并指定带宽(测丢包率)
iperf3 -c 服务端IP -u -b 100M

# 反向测试(从服务端向客户端推数据)
iperf3 -c 服务端IP -R

# 多连接并行,更接近真实场景
iperf3 -c 服务端IP -P 4

用 mtr 追踪路由与丢包

mtr 是 ping + traceroute 的合体,能实时显示每一跳的延迟和丢包率,是定位"卡在哪里"的利器:

# 安装 mtr
apt install -y mtr-tiny   # Debian/Ubuntu
yum install -y mtr        # CentOS

# 运行 mtr(交互界面,按 q 退出)
mtr 目标IP或域名

# 输出报告模式(适合保存结果)
mtr --report --report-cycles 100 目标IP

# 指定只用 ICMP
mtr --icmp 目标IP

解读 mtr 报告

列名含义异常判断
Loss%该跳丢包率中间跳 >5% 且后续也高,需关注
Snt已发送包数越多越准确
Last/Avg/Best/Wrst最后/平均/最低/最高延迟Wrst 远高于 Avg 说明抖动大
StDev延迟标准差越小越稳定

中间跳丢包不一定是问题

部分路由器对 ICMP 限速,mtr 显示中间某跳丢包但后续跳恢复正常,说明那一跳只是降低了 ICMP 优先级,并非真实丢包。真正的网络问题通常体现在最终目标的丢包率

综合诊断流程

  1. 先用 speedtest-cli 确认 VPS 整体带宽是否正常
  2. 如果带宽正常但用户反馈慢,用 mtr 追踪从 VPS 到用户 IP 的路由
  3. 如果特定两点传输慢,用 iperf3 测真实吞吐量
  4. 对比延迟和丢包率,判断瓶颈在 VPS 出口、中间骨干,还是用户侧

小结

  • speedtest-cli 快速了解 VPS 到公共节点的带宽基准
  • iperf3 点对点测试真实传输速率,比 speedtest 更贴近业务
  • mtr 定位丢包所在跳数,区分真丢包与 ICMP 降优先级
  • 综合三类工具才能全面判断网络质量

常见问题

speedtest-cli 显示下行 500 Mbps,但实际下载只有 10 MB/s,为什么?

这通常是线路路由问题。speedtest 到的节点可能走了优质直连线路,而你的用户下载时走了不同路径。用 mtr 追踪用户侧路由,或用 iperf3 在用户侧直接测试。

iperf3 测试时报 Connection refused,怎么解决?

确认服务端的 iperf3 -s 已启动,且防火墙已放行 5201 端口:ufw allow 5201(Debian/Ubuntu)或 firewall-cmd --add-port=5201/tcp --permanent(CentOS)。

mtr 显示最后一跳 100% 丢包,服务器挂了吗?

不一定。目标服务器可能封禁了 ICMP,导致 mtr 显示 100% 丢包,但 TCP 服务正常运行。用 curl -I 或浏览器实际访问来确认服务是否可用。