去年底我和一个朋友同时买了 VPS,都是入门款 2 核 2G。他买的那台月付 $6,我买的月付 $5。日常都跑 WordPress + Nginx + PHP-FPM + MySQL,SSH 上去改配置、备份数据库,用了三四个月都相安无事,直到有一天我在他那台机器上跑了一次磁盘基准测试。随机 IOPS 差了 55 倍。同一价位、同一配置、同一用途,磁盘性能可以差出两个数量级。如果你正在挑入门款 VPS,这篇 VPS 跑分实测是过去半年 5 台机器的完整数据,看完能避开厂商页面上从不标注的最大坑。
这件事颠覆了我对 VPS 选购的认知。之前我觉得入门款都差不多:CPU 差 20%、内存多 1G 少 1G,体感上区别不大。但磁盘 IO 的差距大到足以决定一台 VPS 能不能拿来跑生产环境。下面是过去半年用 5 台不同厂商入门款 VPS 的完整 VPS 跑分记录 + 实际使用对比。
VPS 跑分背景:五台机器,半年记录
2025 年 10 月到 2026 年 4 月,我前后买了 5 台入门款 VPS,有买来跑网站的,有买来跑 CI/CD 的,有买来当测试机的。每台买回来第一件事就是跑分:dd 测顺序读写、fio 测随机 IO、sysbench 测 CPU 和内存。跑完记录数据,才开始部署环境。
下面选两台最有代表性的对比:一台是表现最差的,一台是表现最好的,都是 KVM 虚拟化、2C2G、月费 $5-6。其余三台的数据在中间区间,不赘述。
测试环境
| A(表现差) | B(表现好) | |
|---|---|---|
| CPU | 2 vCPU (Intel Xeon) | 2 vCPU (AMD EPYC) |
| 内存 | 2 GB | 2 GB |
| 硬盘 | SSD(厂商标注) | 本地 NVMe SSD |
| 虚拟化 | KVM | KVM |
| 月费 | $6 | $5 |
| 购入时间 | 2025.10 | 2025.12 |
标称参数几乎一模一样。如果只看商品页面,你会觉得 A 还贵一点、应该更好。实际刚好反过来:A 是网络存储、B 是本地 NVMe。这个区别厂商一般不会主动告诉你,但在 VPS 跑分里会彻底暴露。
测试 1:dd 顺序读写
最简单的基准测试,写入 1GB 文件测吞吐量。台 A 跑出来的数字还算体面:
# 写入测试
dd if=/dev/zero of=/tmp/test bs=1M count=1024 conv=fdatasync
# 读取测试(先清缓存)
echo 3 > /proc/sys/vm/drop_caches
dd if=/tmp/test of=/dev/null bs=1M count=1024
| A | B | |
|---|---|---|
| 写入 (1GB) | 280 MB/s | 1.8 GB/s |
| 读取 (1GB) | 350 MB/s | 2.1 GB/s |
dd 测的是连续大文件读写,相当于你在磁盘上顺序写一个大文件。B 快 5-6 倍,但这个差距在实际使用中你感觉不太到,因为 WordPress 不会频繁读写 1GB 的连续文件。真正说明问题的是 fio 随机读写,也是所有 VPS 跑分方法里最关键的一项。关于 fio 参数详解,官方文档有完整的 randrw、numjobs、ioengine 说明。
测试 2:fio 随机读写——这才是关键
WordPress 的真实 IO 模式是随机小 IO:数据库每次查询只读几 KB、PHP 进程读写 opcode 缓存碎片、Nginx 创建和清理 FastCGI 缓存文件。用 fio 模拟这个场景:4KB 块、70% 读 30% 写、4 个并发作业:
apt install fio -y
fio --name=randrw --ioengine=libaio --direct=1
--bs=4k --size=1G --numjobs=4 --rw=randrw
--rwmixread=70 --runtime=60 --group_reporting
| A | B | 差距 | |
|---|---|---|---|
| 随机读 IOPS | 1,200 | 68,000 | 56x |
| 随机写 IOPS | 400 | 22,000 | 55x |
| 随机读延迟 | 12 ms | 0.3 ms | 40x |
随机读 1200 vs 68000 IOPS。这意味着如果数据库同时有 10 个查询,每个查询读 10 个 4KB 块,A 需要 0.08 秒、B 需要 0.0015 秒。单次差距不大,但 WordPress 每个页面加载背后可能有几十甚至上百次数据库查询,累积起来的差距就是 1.2 秒 vs 0.4 秒。再乘上每天几千次页面访问,这个差距是实打实的用户体验损失。任何一份靠谱的 VPS 跑分都应该以 fio 随机 IOPS 为核心指标,而不是 dd 连续读写。
延迟数据更说明问题:12ms 是典型的网络存储延迟,数据要从服务器走网络协议到存储节点再回来。本地 NVMe 在 0.3ms 以内。如果你买到一台声称”SSD”但 fio 随机读延迟超过 5ms 的 VPS,99% 是网络存储。参考 Brendan Gregg 的 Linux 性能分析方法论,磁盘延迟是所有 IO 密集型应用的第一个排查点。
测试 3:sysbench CPU 和内存
磁盘之外,CPU 和内存也跑一下,看看瓶颈到底在哪:
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
sysbench cpu --threads=2 run
sysbench memory --memory-block-size=1M --memory-total-size=10G run
| A | B | |
|---|---|---|
| CPU 单核 | 980 | 1,120 |
| 内存带宽 | 4.2 GB/s | 5.8 GB/s |
CPU 和内存差距在 15-30%,远远不是瓶颈。磁盘 IO 才是两台服务器的分水岭,也是入门款 VPS 之间差异最大的单一指标,也是这套 VPS 跑分方法要重点抓住的。
实际体验:运维操作的体感差距
跑分数据能说明问题,但日常使用场景更能说明影响。以下是过去半年在 AB 两台服务器上实际操作的耗时记录,都是跑了不止一次的平均值:
| 运维操作 | A | B |
|---|---|---|
| WordPress 后台首页 | 1.2s | 0.4s |
| wp search-replace (1000条) | 8s | 1.5s |
| mysqldump (500MB 数据库) | 45s | 6s |
| MySQL 全库恢复 | 52s | 7s |
| tar 打包 10000 个小文件 | 22s | 3s |
| composer install (Laravel) | 3 min | 28s |
| apt update + upgrade | 47s | 12s |
对网站前端访客来说,开启 Nginx FastCGI 缓存后两台差别不大,缓存命中时不走磁盘。但后台操作和运维命令的体验差了好几个数量级。尤其是在紧急情况下:网站挂了需要回滚数据库,A 要等 52 秒,B 只要 7 秒。那 45 秒的等待在焦虑状态下会被放大。
还有一个小细节:A 服务器跑 composer install 的过程中,SSH 终端偶尔会卡,磁盘 IO 被 composer 占满后,连基础的 shell 交互都受影响。B 从来没有这个问题。
为什么厂商写的都是”SSD”,实际差这么多
VPS 厂商标注”SSD”不等于你拿到的是 SSD。实际可能是以下三种之一:
- 本地 NVMe SSD:物理机上直插的 NVMe 盘,IOPS 数万,延迟亚毫秒。B 属于这种。厂商会明确写”NVMe”,只要写了就优先选
- SATA SSD 通过虚拟化层:宿主机上的 SATA SSD 被 hypervisor 分给多台 VM。如果同一块盘上有 20 台 VM,你的 IOPS 就是 1/20。再加上 SATA 本身的协议开销,随机 IO 表现远不如 NVMe
- 网络存储(Ceph/SAN):磁盘在另一台物理机上,数据通过网络协议传输。延迟是网络延迟 + 磁盘延迟的叠加。A 的 12ms 延迟就暴露了这一点,本地 NVMe 不可能到这个数。而且网络存储在邻居效应下更差:别的租户在大量读写时,你的 IOPS 会被进一步压缩
厂商写“高性能 SSD 云硬盘”的,背后大概率是网络存储。写“本地 NVMe SSD”的,才是你实际拿到的东西。买之前搜一下别人的 VPS 跑分贴,比自己买回来测更省时间。
入门款 VPS 选购结论
- 静态站或全缓存命中的站 → 磁盘 IO 不重要,不用纠结
- WordPress / 动态内容 / 数据库读写频繁 → 磁盘 IO 是入门款最重要的选购指标,比 CPU 核心数、内存大小都关键。2C2G 加 NVMe 比 4C4G 加网络存储好用得多
- 厂商页面上只写”SSD”没写”NVMe”的,先当网络存储看待
- 同价位 VPS,磁盘 IO 可以差 50 倍以上。但这件事在选购贴里几乎没人提:大部分测评只测 ping 延迟、下载速度、CPU 跑分,三样都测不到磁盘随机 IO
- 买之前搜
fio跑分,不要看dd。dd 测的是连续读写,不能反映数据库的真实负载 - 新 VPS 到手先跑 fio。随机 4K 读 IOPS 低于 5000 的,跑 WordPress 后台会有明显的操作延迟,退掉或换
- 这篇 VPS 跑分方法的核心:dd 看个大概 → fio 随机 4K 才是真相 → sysbench 确认 CPU/内存不是瓶颈。三个测完不超过 3 分钟
我后来退掉了 A,多花了 $1/月换成 NVMe。每次数据库备份从 45 秒降到 6 秒、全库恢复从 52 秒降到 7 秒、composer install 从 3 分钟降到 28 秒。$1/月买来的是每次运维操作省下的几分钟等待,一年下来值回票价。
新 VPS 三分钟跑分脚本
拿到一台新 VPS,先别急着装环境,花 3 分钟跑完这三个命令再决定退不退:
# 1. dd 顺序写(参考,不是核心指标)
dd if=/dev/zero of=/tmp/ddtest bs=1M count=1024 conv=fdatasync 2>&1 | tail -1
# 2. fio 随机 4K 读(核心指标,必须先 apt install fio -y)
fio --name=randread --ioengine=libaio --direct=1
--bs=4k --size=1G --numjobs=4 --rw=randread
--runtime=30 --group_reporting | grep IOPS
# 3. CPU 简单参考
openssl speed -evp aes-256-gcm -seconds 5 2>/dev/null |
grep "bytes per second"
判断线:fio 随机 4K 读 IOPS > 10000 算及格,> 50000 算优秀。低于 5000 的不建议拿来跑 WordPress,后台操作会有明显的等待感,遇到流量高峰更容易崩。价格差不多的情况下,选 IOPS 高的那个。这是 VPS 跑分里唯一值得认真看的数字。
相关阅读:Nginx FastCGI Cache 完整配置、宝塔 Nginx 限流配置速查、MySQL 慢查询排查实录、Linux 负载排查方法论
© 2026 本文由 Charlie 原创撰写,发布于 sodebug.com。未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。