测试 RackNerd VPS 真实读写速度最推荐直接使用 fio 工具并开启 direct=1 参数,适用于需要评估磁盘真实性能的场景,风险在于高负载 IO 可能暂时影响业务响应。
先说结论:Linux 默认会利用空闲内存缓存磁盘数据,导致普通 dd 测试虚高,必须绕过缓存层才能看到物理磁盘极限。
- 先定位:确认 VPS 架构是否为 KVM,OpenVZ 容器无法准确测试独立磁盘 IO。
- 先做:使用 fio 工具配置 direct=1 参数或直接使用 dd 配合 oflag=direct 标志。
- 再验证:对比多次测试结果,观察 IOPS 和带宽数值是否稳定。
命令速用版
以下命令可直接在 SSH 终端执行,无需安装额外脚本即可完成基础测试。
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
fio -name=write_test -ioengine=libaio -iodepth=1 -rw=write -bs=1M -direct=1 -size=1G -numjobs=1 -runtime=60 -group_reporting
为什么会这样
Linux 系统默认开启 Page Cache 机制,会将写入数据先存到内存再异步刷入磁盘。
普通测试命令只测量了写入内存的速度,而非磁盘物理写入速度。RackNerd 等提供商的 VPS 通常基于 KVM 虚拟化,宿主机负载波动也会影响最终 IO 表现,绕过缓存能排除内存速度干扰。
分步处理
第一步:检查虚拟化类型。使用 systemd-detect-virt 命令,确认输出为 kvm 而非 openvz 或 lxc。
第二步:安装测试工具。CentOS 使用 yum install fio,Ubuntu 使用 apt install fio。
第三步:执行写入测试。运行上述 fio 命令,确保 direct=1 参数存在。
第四步:执行读取测试。将 rw 参数改为 read,再次运行 fio 命令。
怎么验证是否生效
查看 fio 输出中的 bw 字段,单位通常是 KiB/s 或 MiB/s。
如果使用了 direct=1 且数值远低于内存带宽(通常小于 500MB/s 对于 HDD 或普通 SSD),说明测试已绕过缓存。
检查 /proc/meminfo 中的 Cached 值,测试期间该数值不应大幅波动。
常见坑
不要在业务高峰期测试,高 IO 负载可能导致 VPS 被宿主机限制。
避免测试文件过小,小于内存大小的文件容易被完全缓存。
不要频繁执行 drop_caches 命令,这会导致生产环境业务瞬间变慢。
常见问题
dd 和 fio 哪个结果更准?
fio 结果更准,因为它能模拟随机读写和并发队列深度,dd 仅适合顺序写入粗测。
测试会影响 VPS 数据安全吗?
只读测试不影响数据,写入测试会生成临时文件,测试完成后删除即可。
为什么每次测试结果不一样?
宿主机邻居噪声和磁盘物理特性会导致波动,建议取三次测试的平均值。
参考来源
fio 官方文档 - Flexible I/O Tester https://github.com/axboe/fio
Linux Kernel Documentation - Page Cache https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html