vmstat命令详解

vmstatVirtual 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 阻塞,使用 iotopiostat 进一步分析。

注意事项

  • 首次输出:默认显示系统启动以来的平均值,后续输出为实时统计。
  • 字段差异:不同 Linux 发行版或内核版本可能存在输出差异,建议通过 man vmstat 查阅本地文档。

通过结合其他工具(如 topiostatpidstat),vmstat 的数据可以更全面地支撑性能调优和问题定位。

posted @ 2025-05-23 09:52  玛卡巴卡糖  阅读(669)  评论(0)    收藏  举报