vmstat 看什么
vmstat 用一行数据把运行队列、内存换页、块设备吞吐与 CPU 状态摊开,非常适合做第一眼的全局判断:r 队列高说明 CPU 在排队,si 与 so 持续非零说明内存吃紧在换页,bi 与 bo 反映块设备读写方向,wa 偏高说明进程在等 IO。
基本信息
| 适用平台 | Linux 全发行版(procps-ng) |
|---|---|
| 采样 | vmstat 1 5 表示每秒一次共五次 |
| 汇总 | vmstat -s 看内存统计 |
| 磁盘 | vmstat -d 看块设备明细 |
| 首行含义 | 自开机以来的平均值 |
典型使用场景
- 系统卡顿时快速判断是 CPU、内存还是 IO 问题
- 确认是否发生换页,排除内存不足
- 观察运行队列长度判断是否有排队
- 作为工单与报告的现场数据
- 与 iostat、sar 交叉验证判断瓶颈
常用命令
常用命令
vmstat 1 5 # 每秒采样一次,共 5 次
vmstat 1 5 | tail -n +3 # 跳过均值行,只看采样数据
vmstat -s # 内存与换页累计统计
vmstat -d # 按设备看读写次数与扇区
vmstat -w # 使用更宽的列宽,避免数字被折行
free -h # 与内存状态互相对照
nproc # 确认核数,便于判断 r 队列是否偏高字段解读
| 字段 | 含义 | 异常信号 |
|---|---|---|
| r | 运行队列长度 | 持续大于 CPU 核数说明排队 |
| b | 阻塞进程数 | 偏多通常是在等待 IO |
| si 与 so | 换入与换出 | 持续非零说明内存吃紧 |
| bi 与 bo | 块设备读与写 | 配合 iostat 定位具体设备 |
| us 与 sy | 用户态与内核态占比 | sy 偏高多为系统调用密集 |
| wa | 等待 IO 占比 | 偏高多为磁盘或存储慢 |
首行是自开机以来的平均值,从第二行开始才是当前采样;判断趋势一定要看后续行,并配合 nproc 与 free -h 一起看。
si 与 so 为零不代表没有内存压力,还需要看可用内存与扫描计数;反之偶发的换页也不必然说明内存不足,要结合业务峰值判断。
组合判断
- 队列高且用户态占比高:计算资源不足
- 等待 IO 占比高且块读多:磁盘压力大
- 换入换出非零:内存不足在换页
- 阻塞进程偏多:进程卡在 IO 上
- 空闲占比很高但业务慢:瓶颈不在主机侧