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繁忙
内存瓶颈 #
- 低
free
和buff/cache
值表示内存压力 - 高
si
和so
值表示系统正在大量使用交换空间,这通常会导致性能下降
IO瓶颈 #
- 高
bi
和bo
值表示高磁盘活动 - 高
wa
值表示进程在等待IO操作完成
系统负载 #
- 高
in
和cs
值表示系统正在处理大量中断和上下文切换,可能导致性能下降
与其他工具结合使用 #
vmstat
通常与其他性能监控工具结合使用:
top
或htop
:提供进程级别的详细信息iostat
:提供更详细的IO统计信息free
:提供更详细的内存使用情况sar
:提供历史性能数据
提示 #
- 第一行输出显示自系统启动以来的平均值,应该忽略
- 对于实时监控,使用时间间隔(如
vmstat 1
) - 高
wa
值通常表示磁盘IO瓶颈 - 高
r
值通常表示CPU瓶颈 - 高
si
和so
值通常表示内存瓶颈 - 使用
vmstat -S M
以MB为单位显示,使大数字更易读 - 在虚拟化环境中,关注
st
列以检测CPU资源争用