磁盘负载:iostat 与 iotop
如何判断机器是否受磁盘限制,具体是谁在写入,以及如何将数字与您 VPS 档位的速度限制对应起来。
更新于 2026年8月23日
磁盘是“什么都慢,但 CPU 却空闲”的最常见原因。进程都在等待 I/O,负载平均值不断攀升,而 htop 显示的 CPU% 却几乎为零。下面来看看如何用数据看清这一点。
您获得的配额
节点上的磁盘是 NVMe,但速度受套餐档位限制:写入——每核心 60 MB/s,但最低不低于 60,最高不超过 400 MB/s;读取速度是写入的两倍。超过上限后,允许在 30 秒内突发到三倍速度——足以解压一个压缩包或构建一个项目,但不足以持续上传 1 TB 数据。
| 档位 | 核心数 | 写入,MB/s | 读取,MB/s |
|---|---|---|---|
| VDS-1 | 1 | 60 | 120 |
| VDS-2 | 2 | 120 | 240 |
| VDS-3 | 4 | 240 | 480 |
| VDS-4 | 6 | 360 | 720 |
| VDS-5 和 VDS-6 | 8 和 10 | 400 | 800 |
如果您的测量结果正好命中这些数字,说明您已经达到上限——并没有出故障。想要突破,只能升级档位。
iostat:整体情况
apt install -y sysstat # Debian, Ubuntu
dnf install -y sysstat # AlmaLinux, CentOS Stream
iostat -xz 2
该命令每两秒输出一次快照。第一次输出是自启动以来的平均值——跳过它。关注 vda 或 sda 那一行:
r/s、w/s——每秒的读、写操作次数。rkB/s、wkB/s——单位为 MB,除以 1024。与上表对比。await——每次操作的平均等待时间,单位为毫秒。个位数正常;几十、几百意味着出现了排队。%util——磁盘的繁忙程度。持续 90–100 % 说明您已经撞墙了。
vmstat 2 也很有用:wa 列(io 等待)以百分比显示 CPU 有多少时间只是在等待磁盘。
iotop:究竟是谁在写
apt install -y iotop && iotop -oPa
-o 只显示活跃进程,-P 显示进程而非线程,-a 显示自启动以来的累计量。观察一分钟后,您就能看到真正的元凶:通常是数据库、日志收集器或备份。
不进入交互界面的一次性检查:
iotop -boPan 3 | head -20
发现问题后该怎么办
- 日志在写。 限制其大小:
journalctl --vacuum-size=200M,并在/etc/systemd/journald.conf中设置SystemMaxUse=200M。更多内容见 systemd 日志。 - 数据库在写。 检查是否因为缺少索引而进行全表扫描,以及缓冲区是否设置得太小,导致一切都被迫落盘。
- 在工作时间进行备份或 rsync。 限制速度:
rsync --bwlimit=20M;归档时使用ionice -c3 nice -n19 tar ...,让任务主动让出资源。 - Swap。 如果磁盘忙于分页,问题就不在磁盘,而在内存——请阅读 内存与 swap。
常见错误
用 dd 和 conv=fdatasync 测速,并根据单次运行下结论:最初几秒跑在突发速度上,会给出虚高的结果。正确的方法见 磁盘与网络速度基准测试。
磁盘写满也会表现为“什么都慢”:没有可用空间,服务无法写入临时文件而卡住。先检查
df -h——只需一秒钟。