vmstat 命令输出详解
vmstat 命令输出详解
vmstat(Virtual Memory Statistics)是 Linux/Unix 系统中用于监控内存、进程、CPU 和 I/O 等系统性能的工具。
它的输出分为 Procs(进程)、Memory(内存)、Swap(交换分区)、IO(块设备 I/O)、System(系统中断和上下文切换) 和 CPU(CPU 使用率) 六大模块。
1. 命令格式与常用参数
vmstat [选项] [间隔时间] [次数]
示例:vmstat 1 5 表示每秒刷新一次,共刷新 5 次。
关键选项:
-a:显示活跃/非活跃内存(替代默认的 buffer/cache 列)。
-s:显示各统计事件的内存摘要。
-d:显示磁盘 I/O 统计。
-p <分区>:显示特定分区的 I/O 统计。
2. 默认输出字段详解
执行 vmstat 后的默认输出如下(示例)
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 0 12345 67890 54321 0 0 0 0 42 88 5 1 94 0 0
字段说明
| 分类 | 字段 | 含义 |
|---|---|---|
| Procs | r |
运行队列中的进程数(正在运行或等待 CPU)。值长期 >CPU 核心数表示 CPU 瓶颈。 |
b |
阻塞(等待 I/O 完成)的进程数。值高表示 I/O 瓶颈。 | |
| Memory | swpd |
已使用的交换分区内存(单位 KB)。值持续增加表示内存不足。 |
free |
空闲物理内存(单位 KB)。 | |
buff |
用作缓冲区的内存(如磁盘缓存)。 | |
cache |
用作缓存的内存(如文件系统缓存)。 | |
| Swap | si |
从交换分区读入内存的速率(KB/s)。值高表示内存不足。 |
so |
从内存写入交换分区的速率(KB/s)。值高表示内存不足。 | |
| IO | bi |
从块设备(磁盘)读入的速率(KB/s)。 |
bo |
写出到块设备的速率(KB/s)。 | |
| System | in |
每秒中断数(包括时钟中断和 I/O 中断)。 |
cs |
每秒上下文切换次数。值高表示 CPU 时间被频繁切换。 | |
| CPU | us |
用户态 CPU 使用率(非内核进程)。 |
sy |
内核态 CPU 使用率(系统调用、中断等)。 | |
id |
空闲 CPU 百分比。 | |
wa |
CPU 等待 I/O 完成的时间百分比。值高表示 I/O 瓶颈。 | |
st |
被虚拟机偷走的 CPU 时间(仅虚拟化环境)。 |
3. 关键指标解读
- 内存不足:free 极低且 si/so 持续非零。
- CPU 瓶颈:r 大于 CPU 核心数,且 id 接近 0。
- I/O 瓶颈:b 和 wa 值高,bi/bo 速率大。
- 上下文切换频繁:cs 值远高于正常水平(如 >10000)。
4. 扩展用法示例
显示磁盘 I/O 统计
vmstat -d
输出字段:
reads/s:每秒读操作次数。
writes/s:每秒写操作次数。
IOwait:等待 I/O 的 CPU 时间。
显示内存摘要
vmstat -s
输出类似 free -s 的内存统计摘要。
5. 与其他工具对比
- top/htop:实时进程级监控,但 vmstat 更轻量,适合脚本化。
- sar:历史数据分析,vmstat 适合即时快照。
- iostat:专注于磁盘 I/O,而 vmstat 覆盖更广。
总结:
vmstat 是快速诊断系统瓶颈的利器,重点关注 r、b、free、si/so、us/sy、wa 和 cs 字段。

浙公网安备 33010602011771号