磁盘速度:基准与突发
磁盘速度限制如何按档位计算,为什么需要 30 秒突发,如何测量真实速度,以及达到限制时该怎么办。
更新于 2026年8月23日
VPS 上的磁盘是 NVMe,但速度受套餐层级限制,以免单台机器耗尽节点的共享资源。理解这些数字,您就不会再问“为什么 CPU 空闲时数据库却很慢”。
如何计算
写入基线为每核心 60 MB/s,但不低于 60、不高于 400 MB/s。读取是写入基线的两倍。超过基线后,可在 30 秒内突发至其三倍的值。
| 套餐 | 核心数 | 写入基线 | 读取基线 | 写入突发(30 秒) |
|---|---|---|---|---|
| VDS-1 | 1 | 60 MB/s | 120 MB/s | 180 MB/s |
| VDS-2 | 2 | 120 MB/s | 240 MB/s | 360 MB/s |
| VDS-3 | 4 | 240 MB/s | 480 MB/s | 720 MB/s |
| VDS-4 | 6 | 360 MB/s | 720 MB/s | 1080 MB/s |
| VDS-5 | 8 | 400 MB/s | 800 MB/s | 1200 MB/s |
| VDS-6 | 10 | 400 MB/s | 800 MB/s | 1200 MB/s |
突发正好覆盖它该覆盖的场景:应用启动、解压归档、执行迁移。而持续的写入流——复制数 GB 数据、构建、扫描大型数据库——则以基线速度运行。
如何测量
sudo apt install -y fio
fio --name=w --rw=write --bs=1M --size=2G --numjobs=1 \
--runtime=60 --time_based --end_fsync=1 --directory=/var/tmp
最初几秒会显示突发速度,随后速度会降到基线——这是正常且符合预期的现象,并非故障。
不安装软件包的快速粗略检查:
dd if=/dev/zero of=/var/tmp/testfile bs=1M count=2048 oflag=direct
rm /var/tmp/testfile
不要在工作时间对生产机器运行磁盘测试。测试会真正占满全部可用带宽,在这几分钟内您的网站响应会需要数秒。也不要留下测试文件:在 40 GB 磁盘上留下两 GB 是相当可观的一部分,参见磁盘空间。
如何判断磁盘是瓶颈
sudo apt install -y sysstat
iostat -x 2 5
vmstat 2 5
关注两个指标:%util 接近 100,以及 await 达到数十毫秒,说明存在磁盘队列。在 vmstat 中迹象相同——b 列(等待的进程)不断增长,而 CPU 使用率百分比很低。
另一个症状:load average 很高,而 CPU 几乎空闲。Linux 的负载平均值也会计入等待磁盘的进程。
具体是谁在写入:
sudo iotop -o -b -n 3
如果已经撞上瓶颈该怎么办
- 在时间上错开。 复制、镜像构建、报表——安排在夜间,且不要同时进行。参见计划任务。
- 限制后台任务。 对所有不急的任务使用
rsync --bwlimit、nice -n 19 ionice -c3 <command>。 - 减少写入。 限制日志大小,关闭应用中过多的详细输出,如果缓存能挺过重启,就把它移到内存(
tmpfs)中。 - 调优数据库。 在 PostgreSQL 和 MySQL 中,写入的绝大部分是事务日志。为缓冲区分配更多内存意味着更少的磁盘访问。
- 升级套餐。 基线随核心数增长:从 VDS-1 到 VDS-2 会翻倍。套餐升级只能向上进行,并需为已付费周期的剩余天数补差价。
常见错误
- 用
dd测速却不加oflag=direct。 数据会留在页缓存中,得出的数字偏高。 - 把突发速度当作持续速度。 最初 30 秒很快,之后就是基线——这是设计使然。
- 把 swap 放在活动磁盘上并换入其中。 内存不足时,swap 会让磁盘成为瓶颈:最好限制容器,参见资源限制。