Linux vmstat 系统监控命令指南
前言
vmstat 是 Linux/Unix 下常见的系统监控命令,可以按固定时间间隔展示 CPU、内存、swap、I/O 和系统调用相关指标。
和 top 更偏向查看进程不同,vmstat 更适合先看整台机器是否存在 CPU、内存或磁盘 I/O 压力。
一、基本用法
vmstat 常用两个数字参数:
vmstat <采样间隔秒数> <采样次数>
例如每 2 秒采集一次,只采集 1 次:
vmstat 2 1
示例输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 196612 0 2745356 0 0 254 227 0 0 4 2 93 1 0
如果省略采样次数,就会一直持续采集:
vmstat 2
示例输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 194712 0 2678196 0 0 254 227 0 0 4 2 93 1 0
1 0 0 184416 0 2678408 0 0 0 35 5118 8075 2 2 96 0 0
12 0 0 194472 0 2678468 0 0 0 40 5478 8222 2 1 96 0 0
注意:
vmstat第一行通常是系统启动以来的平均统计,后续行才是按指定间隔采集的数据。排查实时问题时,建议重点看第二行开始的持续变化。
二、指标说明
vmstat 的输出可以按 procs、memory、swap、io、system 和 cpu 六组来理解。
进程队列
| 指标 | 含义 | 性能关注点 |
|---|---|---|
r | 正在运行或等待 CPU 时间片的任务数 | 如果 r 长期大于 CPU 核心数,说明 CPU 运行队列有积压,需要继续看 CPU 使用率和业务进程 |
b | 处于不可中断等待状态的任务数 | 常见于等待磁盘 I/O、网络文件系统或内存交换等资源,持续偏高时要继续排查 I/O 和内存压力 |
内存
| 指标 | 含义 | 性能关注点 |
|---|---|---|
swpd | 已使用的 swap 大小 | swpd 不为 0 不一定立刻有问题,要结合 si、so 是否持续活跃判断 |
free | 当前空闲物理内存大小 | 不能只凭 free 判断内存是否不足,还要结合 cache、swap 活动和系统响应 |
buff | 块设备相关缓冲区大小 | 一般不用单独盯这个值,更多是辅助理解系统缓存 |
cache | 文件系统页面缓存大小 | cache 大通常说明系统缓存了较多文件内容,如果 I/O 压力不高,一般是正常现象 |
swap
| 指标 | 含义 | 性能关注点 |
|---|---|---|
si | 每秒从 swap 读入内存的数据量 | 长期不为 0 说明系统正在发生换入,通常意味着内存压力需要关注 |
so | 每秒从内存写入 swap 的数据量 | 长期不为 0 说明系统正在发生换出,严重时会明显拖慢系统 |
判断 swap 时,不要只看 swpd,更要看 si 和 so 是否持续有值。如果 swpd 有值,但 si、so 长期为 0,说明当前不一定存在活跃的内存交换。
I/O
| 指标 | 含义 | 性能关注点 |
|---|---|---|
bi | 每秒从块设备读入的数据量 | 如果 bi、bo 持续偏高,同时 wa 也高,通常要怀疑磁盘 I/O 瓶颈 |
bo | 每秒写入块设备的数据量 | 持续写入很高时,要继续定位具体进程、日志、数据库或业务写入来源 |
bi、bo 高不一定单独代表异常。更可靠的判断方式是结合 wa、阻塞任务数、业务响应时间和磁盘设备指标一起看。
系统调用
| 指标 | 含义 | 性能关注点 |
|---|---|---|
in | 每秒中断次数,包含时钟中断 | 数值持续异常偏高时,可能和设备中断、网络流量或系统负载有关 |
cs | 每秒上下文切换次数 | 持续偏高可能说明线程切换频繁、锁竞争明显,或者系统调用压力较大 |
in 和 cs 越高,说明系统在中断处理和任务切换上消耗的资源越多。它们通常需要结合 CPU 的 sy 和业务线程模型一起判断。
CPU
| 指标 | 含义 | 性能关注点 |
|---|---|---|
us | 用户态 CPU 占用比例 | 长期偏高时,优先排查业务进程、算法、线程和热点函数 |
sy | 内核态 CPU 占用比例 | 偏高时可能和系统调用、上下文切换、网络或 I/O 相关 |
id | CPU 空闲比例 | id 长期很低时,说明 CPU 资源紧张 |
wa | CPU 等待 I/O 完成的时间比例 | 持续超过 20% 通常说明 I/O 等待已经比较明显 |
st | 虚拟化环境中被宿主机拿走的 CPU 时间比例 | 在云主机或虚拟机中如果 st 持续偏高,需要关注宿主机资源争用 |
排查 CPU 时,可以先看 id 是否长期偏低,再看忙在 us、sy 还是 wa。如果 us 高,多半要看应用;如果 sy 高,要看系统调用和内核态消耗;如果 wa 高,则优先往磁盘 I/O 方向排查。
三、推荐排查流程
-
先连续采样系统状态:
vmstat 2 10从第二行开始看实时数据,不要只看第一行。如果
id很低,说明 CPU 空闲少;如果wa高,说明 I/O 等待明显;如果si、so持续不为 0,说明 swap 正在活跃。 -
r长期大于 CPU 核心数,并且id长期很低时,先定位 CPU 进程:top重点看哪个进程
%CPU长期靠前。如果是业务进程,再继续看线程、日志或性能分析;如果sy也很高,要注意系统调用、上下文切换和内核态消耗。 -
wa持续偏高,或者b持续不为 0 时,继续定位磁盘 I/O:iostat -x 2 5 iotop -oiostat用来看是哪块磁盘忙,iotop用来看哪个进程在读写。如果机器没有安装这些工具,也可以先用vmstat的bi、bo判断读写是否持续偏高。 -
si、so持续不为 0 时,先确认内存压力:free -h top看可用内存是否很低、swap 是否持续增长,以及是否有进程占用大量内存。swap 活跃时,即使 CPU 看起来不高,系统也可能明显变慢。
vmstat 适合先把问题方向分出来:CPU、内存、swap 还是 I/O。现场排查时,不要只看单个指标,最好连续采样几次,看它是不是持续增长或长期偏高。