Skip to content
VDS · 监控与性能

测量磁盘和网络速度

如何在您的 VPS 档位上如实测量磁盘和网络、哪些数值属于正常,以及为何测试的最初几秒总是不可信。

更新于 2026年8月23日

测量在两种情况下是必要的:确认机器是否兑现了承诺,以及了解您的应用是否已经触及硬件上限。关键在于正确地测量,否则您会得到看起来漂亮、却与现实毫无关系的数字。

您应该得到的结果

磁盘速度受套餐档位限制:每核写入 60 MB/s,但最低不低于 60、最高不超过 400 MB/s;读取速度是写入速度的两倍。在持续上限之上,允许在 30 秒内以三倍的突发速度运行。

档位写入,MB/s读取,MB/s突发写入,MB/s
VDS-160120180
VDS-2120240360
VDS-3240480720
VDS-43607201080
VDS-5、VDS-64008001200

网络带宽最高 500 Mbit/s,在理想条件下约为 60 MB/s。

因此,最重要的方法论结论是:短时间的测试会落在突发窗口内,显示出虚高的结果。您需要测量超过 30 秒,或者在明显超出突发量的数据量上进行测量。

磁盘

快速顺序写入检查:

dd if=/dev/zero of=/root/testfile bs=1M count=8192 oflag=direct status=progress
rm /root/testfile

oflag=direct 会绕过页缓存——没有它,您测到的是内存速度。在 VDS-1 上写入 8 GB 所需时间明显超过 30 秒,因此突发会被平均掉。

冷缓存读取:

dd if=/dev/zero of=/root/testfile bs=1M count=4096 oflag=direct
sync && echo 3 > /proc/sys/vm/drop_caches
dd if=/root/testfile of=/dev/null bs=1M iflag=direct
rm /root/testfile

更可靠的工具是 fio;它可以进行随机访问测试,而这正是数据库所关心的:

apt install -y fio
fio --name=rand --rw=randwrite --bs=4k --size=2G --numjobs=1 \
    --runtime=60 --time_based --direct=1 --ioengine=libaio --iodepth=32 \
    --filename=/root/fiotest
rm /root/fiotest

请关注 IOPS 和延迟,而不只是兆字节数:以 4 KB 块进行随机写入时,兆字节数总是很有限。

网络

apt install -y speedtest-cli && speedtest-cli --secure
curl -o /dev/null -w '%{speed_download}\n' https://speed.cloudflare.com/__down?bytes=104857600
iperf3 -c OTHER_SERVER -t 30       # if there is a second machine

结果取决于到测量点的路由,因此请从两三个不同的来源进行测试。到特定用户的速度总是低于通道上限——路径上还有其他网络。

请单独测量延迟:ping -c 20 8.8.8.8 和 mtr -rwc 50 8.8.8.8 会显示数据包在哪里丢失。

常见错误

  • 测试时没有使用 direct。 不带 oflag=direct 的 dd 会写入缓存,显示出每秒数千兆字节的结果。那是内存速度。
  • 数据量太小。 在 VDS-3 上 1 GB 落在突发范围内——您会得到虚高的结果。
  • 在负载下测量。 如果当时有数据库或备份在运行,您测到的是剩余部分。开始前请检查 iostat。
  • 忘记删除测试文件。 几次运行很容易吃掉 VDS-1 磁盘上 40 GB 的空间;参见磁盘空间不足。
  • 在恢复磁盘上测量。 SystemRescue 模式不适用于基准测试;它的性能特征不同。

如果在空闲机器上结果持续低于表格中的数值,请附上命令输出并联系支持。如果结果恰好等于持续上限,说明您已经触及档位上限,只有升级到更高档位才能改善。