人人都会AI编程

vmstat:系统整体内存与虚拟内存统计

更新时间:2026-07-12

vmstat(Virtual Memory Statistics)是一个轻量级的系统监控工具,能在一行中同时报告 CPU、内存、I/O 和系统整体负载情况。它非常适合用来快速判断系统当前是否存在内存压力、I/O 瓶颈或 CPU 争用。

1. 基本用法

直接执行 vmstat 会打印一次自开机以来的平均值,通常使用带间隔参数的形式来持续观察:

vmstat 2 5   # 每 2 秒输出一次,共输出 5 次后退出
vmstat 2     # 每 2 秒输出一次,直到手动停止

输出示例如下:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 823456 102340 4567890   0    0    12    3   120  250 5  2 92  1  0

2. 关键字段解读

vmstat 的输出按列分组,每组对应一个子系统:

procs(进程)

  • r:处于运行队列的进程数(正在使用 CPU 或等待 CPU)。若长期超过 CPU 核心数,说明 CPU 是瓶颈。
  • b:处于不可中断睡眠的进程数(通常是在等待 I/O)。数值持续偏高说明磁盘或网络 I/O 响应慢。

memory(内存,单位 KB)

  • free:完全未被使用的内存。不要只看这个数字趋近于零就认为内存不足,因为 Linux 会用未用内存做缓存。
  • buff:用作块设备缓冲区的内存(如文件系统元数据)。
  • cache:用作文件数据缓存的内存(Page Cache)。这部分内存可在应用需要时快速回收,实际可用内存应为 free + buff + cache

swap(交换分区)

  • si(swap in):每秒从磁盘读入交换区的数据量(KB/s)。
  • so(swap out):每秒写出到磁盘交换区的数据量(KB/s)。

如果 siso 持续大于 0,通常意味着物理内存不足,系统正在频繁换页(即“颠簸”),性能会急剧下降。

io(块设备 I/O,单位 KB/s)

  • bi(block in):每秒从块设备读入的块数。
  • bo(block out):每秒写入块设备的块数。

注意,这里的块大小不确定,通常与文件系统块大小相关,但可以直观反映磁盘 I/O 的活跃程度。

system(中断与上下文切换)

  • in(interrupts):每秒中断次数,包括硬件中断(网卡、磁盘)和软件中断。
  • cs(context switches):每秒上下文切换次数。过高(如几万以上)可能意味着大量线程或进程频繁切换,需要结合 procs 字段分析。

cpu(CPU 时间分配,百分比)

  • us(user):用户空间进程的 CPU 使用率。
  • sy(system):内核空间(系统调用、内核线程)的 CPU 使用率。
  • id(idle):CPU 空闲率。
  • wa(wait):CPU 因为等待 I/O 完成而空闲的百分比。
  • st(steal):虚拟机被宿主机“偷走”的 CPU 时间(虚拟化环境下特有意义,若持续较高说明宿主机 CPU 超分严重)。

3. 实用场景与技巧

  • 快速判断系统是否流畅

r 是否长期大于 CPU 核数,b 是否持续大于 0,wa 是否偏高,si/so 是否有持续数值。一个健康的系统通常 r 较低、b=0wa < 5so=0

  • 定位性能瓶颈

b 高且 wa 同时升高,瓶颈很可能在磁盘 I/O;若 r 高而 wa 低,瓶颈在 CPU;若 so 经常大于 0,说明内存不足,需要加内存或减小应用内存占用。

  • 配合其他命令使用

vmstat 提供的是系统总体快照,当发现异常时,可以进一步用 topiostatpidstat 等工具定位具体进程或设备。

  • 利用额外选项获得更详细信息
  • vmstat -s:显示自开机以来的各种内存统计总量(如总内存、缓冲区、缓存等)。
  • vmstat -d:显示各个磁盘的读写统计。
  • vmstat -p /dev/sda1:显示指定分区的读写统计。

由于 vmstat 默认输出是数字列,很适合被脚本或监控系统直接解析,也可以直接重定向到日志进行事后分析。它虽然简陋,但因为它极低的开销和跨所有 Linux 发行版的标准存在,是系统管理员工具箱中不可或缺的“第一道诊断”工具。