Linux vmstat
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| CPU | Central Processing Unit | 中央处理器 |
| IO | Input/Output | 输入/输出 |
| KB | Kilobyte | 十进制千字节,1 KB = 1000 字节;某些旧工具用法不同 |
| NFS | Network File System | 网络文件系统 |
1. Command#
vmstat 1vmstat 首次报告通常是启动以来的平均值;后续才是采样间隔数据,分析当前故障时不要把两者混用。
一句话:每 1 秒输出系统级 CPU、run queue、blocked process、memory、swap、IO、context switch,用来判断 CPU 是否排队、进程是否卡在不可中断 IO、系统是否有 IO wait。
1: 每 1 秒刷新一次2. Normal Output Shape#
vmstat 1 第一行通常是自系统启动以来的平均值,后面的行才是每 1 秒的实时采样,排查时重点看第二行以后。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si sw bi bo in cs us sy id wa st
1 0 0 820000 120000 2100000 0 0 1 5 300 600 10 3 86 1 0
8 2 0 400000 100000 1800000 0 0 2048 8192 9000 18000 70 10 5 15 03. Field Units#
r: 单位是 process count,running 或 runnable process 数量,也就是运行队列长度
b: 单位是 process count,blocked process 数量,通常是不可中断 IO 等待
swpd: 单位是 KB,已使用 swap 大小
free: 单位是 KB,空闲内存
buff: 单位是 KB,buffer memory
cache: 单位是 KB,page cache / file cache
si: 单位是 KB/s,每秒从 swap 读入内存
sw: 单位是 KB/s,每秒从内存写到 swap
bi: 单位是 blocks/s,每秒从 block device 读入的 block 数
bo: 单位是 blocks/s,每秒写到 block device 的 block 数
in: 单位是 次数/s,每秒 interrupts
cs: 单位是 次数/s,每秒 context switches
us: 单位是 %,user space CPU
sy: 单位是 %,kernel space CPU
id: 单位是 %,CPU idle
wa: 单位是 %,CPU 等待 IO 的时间比例
st: 单位是 %,被 hypervisor steal 的 CPU 时间,云主机上需要关注4. How To Read r#
r: run queue length,正在运行或等待 CPU 的进程数
r 长期大于 CPU core 数: CPU 有排队,可能 CPU saturation
r 高 + us 高: 应用代码 CPU 忙
r 高 + sy 高: kernel / syscall 压力大
r 高 + wa 不高: 更像 CPU 计算或调度压力,不是磁盘 IO wait例子:
4 core machine:
r = 1~4: 通常还能接受
r = 8: 平均有进程在排队等 CPU
r = 20: CPU pressure 明显,需要找高 CPU 进程或线程5. How To Read b#
b: blocked process count,通常是处于不可中断 sleep 的进程数
b 持续大于 0: 有进程卡在 IO / storage / filesystem / device 等待
b 高 + wa 高: 很像磁盘或底层存储 IO 问题
b 高 + wa 不高: 也可能是 NFS、block device、kernel lock、driver 等等待,需要继续查 D state process下一步:
ps -eo pid,stat,wchan:32,comm | awk '$2 ~ /D/ {print}'
iostat -xmd 1
pidstat -d -p ALL 16. How To Read wa#
wa: CPU 等待 IO 的时间比例,单位是 %
wa 高: CPU 有时间花在等 IO 完成,常见于磁盘慢、云盘打满、swap、文件系统卡顿
wa 高 + bi/bo 高: block IO 活跃,继续用 iostat 看 await / aqu-sz / %util
wa 高 + si/sw 高: swap 活跃,可能内存压力导致性能下降
wa 低不代表没有 IO 慢: 如果只有少量进程卡住,系统级 wa 可能不明显7. Practical Read Order#
1. 先看 r: 是否 CPU run queue 排队
2. 再看 b: 是否有进程不可中断 IO 等待
3. 再看 wa: CPU 是否明显在等 IO
4. 再看 us / sy / id: CPU 时间花在哪里
5. 再看 si / sw: 是否 swap in / swap out
6. 最后结合 bi / bo、iostat、pidstat 定位是哪个磁盘或进程8. Quick Examples#
r high + us high + id low:
应用 CPU 忙,找 top CPU process / thread
r high + sy high:
kernel / syscall 压力大,可能网络包、文件系统、锁、频繁 syscall
b high + wa high:
多个进程卡在 IO,继续看 iostat 的 await / aqu-sz / %util
wa high + si/sw high:
swap 活跃,可能内存压力导致 IO wait
r low + b high:
CPU 不一定忙,但有进程卡在不可中断 IO