测量磁盘和网络速度
如何在您的 VPS 档位上如实测量磁盘和网络、哪些数值属于正常,以及为何测试的最初几秒总是不可信。
更新于 2026年8月23日
测量在两种情况下是必要的:确认机器是否兑现了承诺,以及了解您的应用是否已经触及硬件上限。关键在于正确地测量,否则您会得到看起来漂亮、却与现实毫无关系的数字。
您应该得到的结果
磁盘速度受套餐档位限制:每核写入 60 MB/s,但最低不低于 60、最高不超过 400 MB/s;读取速度是写入速度的两倍。在持续上限之上,允许在 30 秒内以三倍的突发速度运行。
| 档位 | 写入,MB/s | 读取,MB/s | 突发写入,MB/s |
|---|---|---|---|
| VDS-1 | 60 | 120 | 180 |
| VDS-2 | 120 | 240 | 360 |
| VDS-3 | 240 | 480 | 720 |
| VDS-4 | 360 | 720 | 1080 |
| VDS-5、VDS-6 | 400 | 800 | 1200 |
网络带宽最高 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 模式不适用于基准测试;它的性能特征不同。
如果在空闲机器上结果持续低于表格中的数值,请附上命令输出并联系支持。如果结果恰好等于持续上限,说明您已经触及档位上限,只有升级到更高档位才能改善。