⚡ 测试 VPS 带宽

使用 Speedtest 测试 VPS 的下载速度、上传速度和延迟以验证网络性能的完整指南。

⚡ 测试 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 确认。