vmstat 会报告有关 processes, memory, paging, block IO,traps, disks 和 cpu 活动信息。
生成的第一个报告给出了自上次重新启动依赖的平均值。优势是可以按周期或实时采集上述信息。

举例

1
2
3
4
root@compute:~# vmstat
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 759052 1845192 99157744 0 0 0 50 0 0 2 1 96 1 0

解释输出信息

procs:

r: 正在运行的或者等待CPU运行的进程数。当这个值长时间超过了CPU个数,就会出现CPU瓶颈。一般负载大于3就算比较高,大于5是高,大于10系统就不正常。
b: 等待 I/O 完成的阻塞的进程数。

memory:

以下参数会受到 --unit 参数的影响

swpd: 交换内存使用量。
free: 空闲内存的数量。
buff: 缓冲区内存使用量。
cache: 缓存区内存使用量。
incat: 禁用的内存数量。(-a option)
active: 可用的内存数量。(-a option)

swap:

> 以下参数会受到 `--unit` 参数的影响

si: 从磁盘交换到内存的内存量(/s)。
so: 从内存交换到磁盘内存量(/s)。

io:

bi: 从块设备接受的块(block/s)。
bo: 发送到块设备的块(block/s)。

system:

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

cpu:

以下参数之和是总的CPU时间。

us: CPU在用户空间所占用的时间。
sy: CPU在内核空间所占用的时间。
id: CPU空闲时间。
wa: CPU在等待IO所占用的实际。
st: 虚拟机中窃取CPU的时间。(虚拟机需要关注, 一般 `steal time` 维持在很高的数值上,大概率是服务器创建虚拟机太多。)

常用参数

每2秒显示报告共5次

1
2
3
4
5
6
7
8
root@compute:~# vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 757084 1844672 99160048 0 0 0 50 0 0 2 1 96 1 0
2 1 0 756924 1844672 99160096 0 0 8 604 4883 9736 4 1 95 1 0
0 0 0 757040 1844672 99160144 0 0 8 444 3395 8276 2 0 97 1 0
0 0 0 757600 1844672 99160184 0 0 0 466 2905 7775 1 0 99 1 0
0 0 0 758116 1844676 99160184 0 0 0 2440 3070 7604 1 0 99 1 0

参考文章

vmstat - manned.org
理解CPU steal time - MKY-门可意 - 博客园
linux下的缓存机制buffer、cache、swap - 运维总结 [“Cannot allocate memory”问题] - 散尽浮华 - 博客园
Linux vmstat命令实战详解 - ggjucheng - 博客园