vmstat命令详解
vmstat 是 Virtual Memory Statistics 的缩写,主要用于监控 Linux 系统的内存、进程、CPU、磁盘 I/O 等关键资源的使用情况,帮助用户快速定位性能瓶颈。以下是详细的参数说明、输出解析及实际应用示例:
基本语法
vmstat [选项] [刷新间隔] [刷新次数]
常用选项
| 选项 | 描述 |
|---|---|
-a |
显示活跃(active)和非活跃(inactive)内存统计。 |
-d |
报告磁盘 I/O 活动的详细统计数据。 |
-p <分区> |
显示指定磁盘分区的 I/O 统计(如 -p sda)。 |
-s |
显示内存相关事件(如页面换入/换出)的汇总信息。 |
-w |
宽输出模式,优化大内存系统的显示格式。 |
-t |
在输出中添加时间戳(便于记录)。 |
-m |
显示内存的 slabinfo(内核对象的缓存统计,需系统支持)。 |
输出字段解析
运行 vmstat 后的输出通常分为以下部分:
1. Procs(进程)
- r (Running):等待 CPU 的进程数量。若持续 > CPU 核心数,表明 CPU 资源紧张。
- b (Blocked):处于不可中断睡眠(等待I/O)的进程数。值高可能表示磁盘或网络 I/O 阻塞。
2. Memory(内存)
- swpd:已使用的虚拟内存(交换分区)大小(单位:KB)。
- free:空闲的物理内存(单位:KB)。
- buff:用作缓冲区(缓存磁盘块)的内存。
- cache:用作页面缓存(缓存文件数据)的内存。
-
注:Linux 会利用空闲内存作为缓存提升性能。若
free少但cache多不一定有问题,但若swpd持续增长需排查内存泄漏。
3. Swap(交换分区)
- si (Swap In):每秒从磁盘加载到内存的数据量(KB)。高值表示物理内存不足。
- so (Swap Out):每秒从内存换出到磁盘的数据量(KB)。
4. I/O(磁盘)
- bi (Blocks In):每秒从块设备接收的块数(块大小通常为 512B)。
- bo (Blocks Out):每秒发送到块设备的块数。
5. System(系统)
- in (Interrupts):每秒中断次数(包括时钟中断)。
- cs (Context Switches):每秒上下文切换次数。频繁切换可能因进程过多或锁竞争。
6. CPU(处理器)
- us:用户态进程消耗 CPU 时间占比(用户程序执行)。
- sy:内核态 CPU 时间占比(系统调用或中断处理)。
- id:空闲 CPU 时间占比。
- wa:等待 I/O 的 CPU 时间占比。持续高值表明 I/O 瓶颈。
- st:被虚拟机(VM)占用的 CPU 时间(仅虚拟化环境)。
实际应用示例
1. 基础监控
# 每秒刷新一次,持续5次
vmstat 1 5

2. 查看磁盘 I/O
# 详细磁盘统计
vmstat -d

3. 分区级监控
# 监控指定分区(如sda1)I/O
vmstat -p sda1 2

4. 时间戳和宽输出
# 带时间戳,宽格式,每2秒刷新
vmstat -tw 2

常见性能问题诊断
- CPU 瓶颈:高
us(用户进程繁忙)或sy(系统调用频繁)。若r> CPU 核心数需优化程序或增加 CPU。 - 内存不足:高
si/so(频繁使用交换分区),需增加物理内存或优化应用内存使用。 - I/O 瓶颈:高
wa(等待I/O时间长)且高bi/bo,需排查磁盘负载过大或使用更快的存储设备。 - 进程阻塞:持续高
b,检查是否有进程因 I/O 阻塞,使用iotop或iostat进一步分析。
注意事项
- 首次输出:默认显示系统启动以来的平均值,后续输出为实时统计。
- 字段差异:不同 Linux 发行版或内核版本可能存在输出差异,建议通过
man vmstat查阅本地文档。
通过结合其他工具(如 top、iostat、pidstat),vmstat 的数据可以更全面地支撑性能调优和问题定位。
浙公网安备 33010602011771号