vmstat 是 Linux 系统中的一个常用性能监控工具,全称是 Virtual Memory Statistics。它可以实时或定期报告系统的进程、内存、分页、块 I/O、陷阱(中断)和 CPU 活动等信息,帮助管理员快速定位系统性能瓶颈。

博主博客

基本语法

vmstat [选项] [时间间隔 [次数]]
  • 时间间隔:每次刷新之间的秒数。
  • 次数:总共刷新的次数。如果只指定间隔而不指定次数,则会一直循环刷新,直到手动终止(Ctrl+C)。

常用选项

选项 说明
-a 显示活跃和非活跃内存(需要内核支持)。
-f 显示系统启动后创建的进程总数(包括通过 fork、vfork、clone 等创建的)。
-s 以表格形式显示内存统计信息(相当于从 /proc/meminfo 读取)。
-d 显示磁盘读写统计。
-p <分区> 显示指定分区的详细统计(如 vmstat -p /dev/sda1)。
-S <单位> 指定输出的单位,如 k(KB)、m(MB),默认单位为 KB。
-t 在输出末尾添加时间戳。
-w 宽模式输出(保持列对齐,便于阅读)。

输出字段详解

执行 vmstat 不加参数会显示一次自启动以来的平均值。通常使用 vmstat 1 来每秒刷新一次。输出分为六大部分:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

1. procs(进程)

  • r:运行队列中的进程数(等待 CPU 的进程)。若长期大于 CPU 核数,说明 CPU 繁忙。
  • b:处于不可中断睡眠状态的进程数(通常等待 I/O)。

2. memory(内存,单位 KB)

  • swpd:已使用的虚拟内存大小(即被换出到交换分区的内存量)。
  • free:空闲物理内存大小。
  • buff:用作缓冲区的内存大小(缓存块设备元数据等)。
  • cache:用作页缓存的内存大小(缓存文件内容)。

3. swap(交换分区)

  • si:每秒从交换分区读入内存的数据量(swap in)。
  • so:每秒从内存写入交换分区的数据量(swap out)。
    如果 siso 长期不为 0,说明物理内存不足。

4. io(块设备 I/O)

  • bi:每秒从块设备接收到的块数(块读取)。
  • bo:每秒发送到块设备的块数(块写入)。
    这里的“块”大小取决于文件系统,通常为 1KB 或 4KB。

5. system(系统)

  • in:每秒的中断次数,包括时钟中断。
  • cs:每秒的上下文切换次数。如果过高,可能说明系统频繁切换进程,或线程过多。

6. cpu(CPU 使用率)

  • us:用户空间占用 CPU 的百分比(包括 nice 时间)。
  • sy:内核空间占用 CPU 的百分比。
  • id:空闲 CPU 百分比。
  • wa:等待 I/O 完成的 CPU 时间百分比。如果此值高,通常表示磁盘 I/O 慢。
  • st:被虚拟机偷走的 CPU 时间(仅对虚拟机有意义)。

使用示例

1. 基本用法

vmstat 1 5

每秒刷新一次,共输出 5 次。这是最常用的监控方式。

2. 显示活跃/非活跃内存

vmstat -a 1

会多出 inactactive 两列,分别表示非活跃和活跃内存。

3. 查看磁盘统计

vmstat -d

输出每个磁盘的读写总数、合并次数、扇区数和耗时等信息。

4. 查看内存统计摘要

vmstat -s

以表格形式列出内存总量、使用情况、分页统计等。

5. 指定输出单位

vmstat -S m 1

以 MB 为单位显示内存相关数据。

输出解读示例

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 102456  14568  32084 198460    0    1    12    18  120  250 10  5 83  2  0
  • r=2:有 2 个进程正在等待 CPU。
  • b=0:没有进程在等待 I/O。
  • swpd=102456:已使用约 100MB 交换空间。
  • free=14568:剩余约 14MB 物理内存,较小。
  • buff 和 cache:分别为 32MB 和 198MB。
  • si/so=0/1:几乎无换页操作。
  • bi/bo=12/18:磁盘读写量不大。
  • in=120, cs=250:中断和上下文切换正常。
  • us=10, sy=5, id=83, wa=2:CPU 大部分空闲,用户态占 10%,系统态占 5%,等待 I/O 仅 2%,系统负载较低。

如果发现 wa 较高(如超过 30%),且 b 列不为 0,则说明磁盘 I/O 可能是瓶颈。如果 r 长期大于 CPU 核数,且 us+sy 接近 100%,则 CPU 可能是瓶颈。

总结

vmstat 是一个轻量级且功能强大的系统性能分析工具。通过观察其输出的各项指标,可以快速判断系统是否存在 CPU 瓶颈、内存不足或 I/O 压力,是 Linux 运维和性能调优的必备命令之一。