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 字段。

posted @ 2025-07-23 17:19  数据库小白(专注)  阅读(171)  评论(0)    收藏  举报