Skip to content
VDS · 监控与性能

磁盘负载: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-1160120
VDS-22120240
VDS-34240480
VDS-46360720
VDS-5 和 VDS-68 和 10400800

如果您的测量结果正好命中这些数字,说明您已经达到上限——并没有出故障。想要突破,只能升级档位。

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——只需一秒钟。