⚡ 测试 VPS 带宽
本指南将教您如何使用 Speedtest 测试 VPS 带宽,以验证网络性能、测量下载/上传速度并识别潜在的连接问题。
📋 先决条件
- 具有 root 或 sudo 访问权限的 VPS 服务器
- 活动的 SSH 连接
- Ubuntu/Debian(命令适用于这些发行版)
🔧 Speedtest 安装
卸载旧版本
在安装 Speedtest 之前,重要的是卸载所有旧版本以避免冲突:
# 卸载 speedtest-cli(通过 pip 的 Python 版本) sudo pip3 uninstall speedtest-cli -y 2>/dev/null || true # 卸载 speedtest-cli(系统版本) sudo apt remove speedtest-cli -y 2>/dev/null || true sudo apt purge speedtest-cli -y 2>/dev/null || true # 卸载 speedtest(如果存在,通过 apt 的官方版本) sudo apt remove speedtest -y 2>/dev/null || true sudo apt purge speedtest -y 2>/dev/null || true # 清理残留文件 sudo apt autoremove -y sudo apt autoclean -y
Important: 卸载旧版本是必要的,因为只有通过 curl 安装才能正确使用 Ookla 的官方版本。
通过 curl 安装(推荐方法)
Speedtest 是 Ookla 的官方工具,与 speedtest.net 是同一服务。安装只能通过 curl 完成:
# 通过 Ookla 的官方脚本安装 Speedtest curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash # 安装 speedtest sudo apt install speedtest -y
验证安装
# 验证 speedtest 已安装 speedtest --version # 测试 speedtest 是否工作 speedtest --help
🚀 使用 Speedtest
基本测试
# 简单测试(自动选择最佳服务器) speedtest
带选项的测试
# 简单测试(简洁结果) speedtest --simple # 以每秒位数显示单位进行测试 speedtest --bits # 仅显示 JSON 结果 speedtest --json # 将 JSON 结果保存到文件 speedtest --json > speedtest-result.json
选择特定服务器
# 列出可用的 Speedtest 服务器 speedtest --list # 按区域过滤服务器(例如,法国、巴黎) speedtest --list | grep -i "france\|paris" # 测试到特定服务器(使用服务器 ID) speedtest --server SERVER_ID # 使用法国服务器示例 speedtest --server 45170
示例输出
Speedtest by Ookla
Server: Server Name - City (ID: 12345)
ISP: Your ISP
Latency: 12.45 ms (0.05 ms jitter)
Download: 945.23 Mbps (data used: 1.2 GB)
Upload: 842.15 Mbps (data used: 1.0 GB)
Packet Loss: 0.0%
Result URL: https://www.speedtest.net/result/c/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
📊 高级选项
自定义格式测试
# 简单格式(一行) speedtest --format=simple # CSV 格式 speedtest --format=csv # JSON 格式(用于脚本) speedtest --format=json # 带进度的 JSON 格式 speedtest --format=jsonl
使用服务器和自定义格式测试
# 使用 JSON 格式测试到特定服务器 speedtest --server 45170 --format=json # 保存到文件 speedtest --server 45170 --format=json > speedtest-paris.json
有用选项
# 不显示中间结果(进度) speedtest --progress=no # 显示进度 speedtest --progress=yes # 自动接受许可证 speedtest --accept-license # 接受 GDPR Cookie speedtest --accept-gdpr
🎯 特定测试
测试到不同区域
# 按区域列出服务器 speedtest --list | grep -i "france\|paris\|frankfurt\|london\|amsterdam" # 测试到法国服务器(使用 ID 的示例) speedtest --server 45170 # 测试到多个服务器进行比较 for server in 45170 45171 12345; do echo "=== 测试服务器 $server ===" speedtest --server $server --simple echo "" done
完整测试脚本
创建脚本以执行多个测试:
#!/bin/bash echo "=== VPS 带宽测试 ===" echo "" echo "1. Speedtest(最佳服务器):" echo "-------------------------------------" speedtest --simple echo "" echo "2. 测试到法国服务器(巴黎):" echo "-------------------------------------" speedtest --server 45170 --simple echo "" echo "3. 详细测试:" echo "-------------------------------------" speedtest --format=simple echo "" echo "测试完成!"
保存脚本并使其可执行:
# 创建脚本 nano test-bandwidth.sh # 复制上面的内容 # 使其可执行 chmod +x test-bandwidth.sh # 运行 ./test-bandwidth.sh
重复测试(监控)
# 每小时重复 Speedtest while true; do echo "=== $(date) ===" speedtest --simple echo "" sleep 3600 done
保存结果
# 将结果保存到文件 speedtest --format=simple > speedtest-$(date +%Y%m%d-%H%M%S).txt # 保存为 JSON 以便后续处理 speedtest --format=json > speedtest-$(date +%Y%m%d-%H%M%S).json # 追加保存(添加到文件末尾) speedtest --format=simple >> speedtest-history.txt
📊 解释结果
正常速度
速度取决于您的 VPS 计划:
- 入门 VPS : 100-250 Mbps
- 标准 VPS : 250-500 Mbps
- 性能 VPS : 500 Mbps - 1 Gbps
- 高级 VPS : 1 Gbps 及以上
正常延迟
- < 10 ms : 优秀(同一数据中心)
- 10-50 ms : 非常好(区域)
- 50-100 ms : 良好(国内)
- 100-200 ms : 可接受(洲际)
- > 200 ms : 高(可能有问题)
抖动(延迟变化)
- < 1 ms : 优秀
- 1-5 ms : 良好
- 5-10 ms : 可接受
- > 10 ms : 可能有问题
数据包丢失
- 0% : 完美
- < 0.1% : 正常
- 0.1-1% : 可接受
- > 1% : 网络问题
问题迹象
- 速度 < 承诺速度的 50% : 网络问题
- 延迟变化很大(高抖动) : 网络拥塞
- 数据包丢失 > 1% : 连接问题
- 速度随时间下降 : 限制或节流
✅ 最佳实践
- 进行多次测试 : 性能可能因网络负载而异
- 在不同时间测试 : 在基准测试时避免高峰时段
- 测试到不同服务器 : 比较不同位置的结果
- 记录结果 : 保留记录以便将来比较
- 使用 JSON 格式 : 以便使用脚本自动化和分析结果
🆘 故障排除
速度非常慢
# 检查 CPU 负载 top htop # 检查网络使用情况 iftop nethogs # 检查网络错误 ip -s link show # 检查使用带宽的进程 sudo nethogs
Speedtest 问题
如果 speedtest 不能正常工作:
# 验证 speedtest 已安装 which speedtest speedtest --version # 重新安装 speedtest # 首先卸载 sudo apt remove speedtest -y sudo apt purge speedtest -y # 然后重新安装 curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash sudo apt install speedtest -y # 验证它工作 speedtest --version
错误 "speedtest: command not found"
# 检查 speedtest 是否已安装 which speedtest # 如果未找到,重新安装 curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash sudo apt install speedtest -y # 如有必要,添加到 PATH echo 'export PATH=$PATH:/usr/bin' >> ~/.bashrc source ~/.bashrc
权限错误
# 如果收到权限错误,使用 sudo sudo speedtest # 或将用户添加到适当的组 # (对于 speedtest 通常不需要)
测试找不到服务器
# 列出可用服务器 speedtest --list # 按其 ID 测试到特定服务器 speedtest --server SERVER_ID # 检查互联网连接 ping -c 3 8.8.8.8 curl -I https://www.speedtest.net
📝 有用命令
使用简单结果进行快速测试
# 简单的一行测试 speedtest --simple # 使用特定服务器测试 speedtest --server 45170 --simple # 保存结果 speedtest --simple > speedtest-result.txt
使用 JSON 结果进行脚本测试
# 使用 JSON 格式测试 speedtest --format=json # 保存为 JSON speedtest --format=json > result.json # 使用 jq 提取特定值(如果已安装) speedtest --format=json | jq '.download.bandwidth, .upload.bandwidth, .ping.latency'
连续监控
# 每小时测试一次并记录日志 while true; do echo "$(date): $(speedtest --simple 2>&1)" >> /var/log/speedtest.log sleep 3600 done
📚 其他资源
❓ 常见问题
问:为什么在安装 speedtest 之前需要卸载 speedtest-cli?
答:旧的 speedtest-cli 版本(通过 pip 安装)已过时,可能与 Ookla 的官方 speedtest 版本冲突。重要的是卸载它以避免问题。
问:为什么我的测试结果在不同测试之间会有所不同?
答:这是正常的。带宽可能因网络负载、时间、使用的测试服务器和网络拥塞而异。运行多次测试以获得平均值。
问:如果速度略低于承诺值,我应该担心吗?
答:10-20% 的差异是正常的。如果速度持续低于 50%,请联系支持。
问:如何测试上传带宽?
答:Speedtest 在同一测试中自动测试上传和下载。结果包括两个值。
问:我可以使用 speedtest 在 VPS 和我的计算机之间进行测试吗?
答:Speedtest 只能测试到公共 Speedtest.net 服务器。要在 VPS 和计算机之间进行测试,您需要使用其他工具(如 iperf3),但本指南不涵盖此内容。
问:如何解释抖动?
答:抖动是延迟变化。低抖动(< 5 ms)表示连接稳定。高抖动(> 10 ms)可能对延迟敏感的应用程序(语音、视频)造成问题。
问:Mbps 和 MB/s 有什么区别?
答:Mbps(每秒兆位)用于网络带宽。MB/s(每秒兆字节)用于存储。1 MB/s = 8 Mbps。Speedtest 默认以 Mbps 显示,使用 --bits 确认。