vmstat命令

vmstat 命令 #

vmstat(Virtual Memory Statistics)是一个用于报告系统虚拟内存、进程、CPU活动、块IO和磁盘活动等统计信息的工具。它可以帮助系统管理员识别系统瓶颈和性能问题。

语法 #

vmstat [选项] [延迟 [计数]]

常用选项 #

选项 描述
-a 显示活跃和非活跃内存
-f 显示从系统启动以来的fork数量
-m 显示slabinfo
-n 只在头部显示一次而不是重复
-s 显示内存相关统计信息和计数器表
-d 显示磁盘统计信息
-p 分区 显示指定分区的详细统计信息
-S 使用指定单位显示数据(k、K、m、M)
-t 显示时间戳
-w 宽输出模式

输出字段说明 #

vmstat的输出分为几个部分:

procs(进程) #

  • r: 运行队列中的进程数(等待运行的进程数)
  • b: 处于不可中断睡眠状态的进程数

memory(内存) #

  • swpd: 使用的虚拟内存量(KB)
  • free: 空闲内存量(KB)
  • buff: 用作缓冲区的内存量(KB)
  • cache: 用作缓存的内存量(KB)
  • inact: 非活跃内存量(使用-a选项时显示)
  • active: 活跃内存量(使用-a选项时显示)

swap(交换空间) #

  • si: 从磁盘交换入内存的数据量(KB/s)
  • so: 从内存交换到磁盘的数据量(KB/s)

io(块设备) #

  • bi: 从块设备接收的块数(块/s)
  • bo: 发送到块设备的块数(块/s)

system(系统) #

  • in: 每秒的中断数,包括时钟中断
  • cs: 每秒的上下文切换次数

cpu(处理器) #

  • us: 用户时间百分比
  • sy: 系统时间百分比
  • id: 空闲时间百分比
  • wa: 等待IO的时间百分比
  • st: 从虚拟机中窃取的时间百分比(使用虚拟化时)

常见用法 #

1. 显示当前系统状态 #

vmstat

这将显示自系统启动以来的平均值。

2. 每秒更新一次,共更新5次 #

vmstat 1 5

这将每秒显示一次统计信息,共显示5次。

3. 显示内存统计信息 #

vmstat -s

4. 显示磁盘统计信息 #

vmstat -d

5. 显示特定分区的统计信息 #

vmstat -p /dev/sda1

6. 显示活跃和非活跃内存 #

vmstat -a

7. 带时间戳的输出 #

vmstat -t 1

8. 显示单位为MB的统计信息 #

vmstat -S M

实用示例 #

1. 监控系统负载 #

vmstat 5

这将每5秒更新一次统计信息,持续显示系统负载情况。

2. 检查内存使用情况 #

vmstat -s | grep -i mem

这将显示所有与内存相关的统计信息。

3. 检查交换活动 #

vmstat 1 | awk '{print $7, $8}'

这将每秒显示交换入(si)和交换出(so)的数据量。

4. 检查IO等待时间 #

vmstat 1 | awk '{print $16}'

这将每秒显示IO等待时间百分比(wa)。

5. 检查系统整体性能 #

vmstat 1 10

观察r(运行队列)、b(阻塞进程)、si/so(交换活动)和wa(IO等待)列,这些是性能瓶颈的常见指标。

性能分析指南 #

CPU瓶颈 #

  • r值(>处理器核心数)表示CPU饱和
  • us值表示用户进程消耗大量CPU
  • sy值表示系统调用或内核消耗大量CPU
  • id值表示CPU繁忙

内存瓶颈 #

  • freebuff/cache值表示内存压力
  • siso值表示系统正在大量使用交换空间,这通常会导致性能下降

IO瓶颈 #

  • bibo值表示高磁盘活动
  • wa值表示进程在等待IO操作完成

系统负载 #

  • incs值表示系统正在处理大量中断和上下文切换,可能导致性能下降

与其他工具结合使用 #

vmstat通常与其他性能监控工具结合使用:

  • tophtop:提供进程级别的详细信息
  • iostat:提供更详细的IO统计信息
  • free:提供更详细的内存使用情况
  • sar:提供历史性能数据

提示 #

  • 第一行输出显示自系统启动以来的平均值,应该忽略
  • 对于实时监控,使用时间间隔(如vmstat 1
  • wa值通常表示磁盘IO瓶颈
  • r值通常表示CPU瓶颈
  • siso值通常表示内存瓶颈
  • 使用vmstat -S M以MB为单位显示,使大数字更易读
  • 在虚拟化环境中,关注st列以检测CPU资源争用