了解搬瓦工 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 优先级,并非真实丢包。真正的网络问题通常体现在最终目标的丢包率。
综合诊断流程
- 先用
speedtest-cli确认 VPS 整体带宽是否正常 - 如果带宽正常但用户反馈慢,用
mtr追踪从 VPS 到用户 IP 的路由 - 如果特定两点传输慢,用
iperf3测真实吞吐量 - 对比延迟和丢包率,判断瓶颈在 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 或浏览器实际访问来确认服务是否可用。