vmstat
是一个收集和报告系统内存,swap,处理器资源的工具,全称是 Virtual Meomory Statistics,虚拟内存统计,Linux 下监控内存经常使用的工具,可以对系统内存,CPU,进程进行监控。
vmstat reports information about processes, memory, paging, block IO, traps, disks and cpu activity.
使用
vmstat
的使用非常简单,直接运行
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 9496 1632720 1179760 4628968 0 0 9 37 55 12 3 1 96 0 0
输出一大串数据,第一行数据 vmstat 会计算从开机到运行命令这一时刻之间记录的平均数据。此后的每一次都是时间间隔内的情况。
vmstat [delay] [count]
第一行会打印平均值,之后每隔 [delay] 的时间,打印一次报告,在打印 [count] 次之后停止。
输出值解释
Procs
r: 显示多少进程在等待 CPU The number of runnable processes (running or waiting for run time).
b: 显示多少进程正在进行不可终端的休眠,等待 IO(The number of processes in uninterruptible sleep)
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
System
in: 每秒中断数量 The number of interrupts per second, including the clock.
cs: 每秒切换上下文次数 The number of context switches per second.
CPU
These are percentages of total CPU time.
us: 执行用户代码的时间 Time spent running non-kernel code. (user time, including nice time)
sy: 执行内核代码的时间 Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
Example
使用 stress
命令进行测试,并对 vmstat
结果进行观察。先用一个终端打开 vmstat
,然后在其他终端输入 stress 响应的命令观察。
CPU 密集型任务
使用 4 worker 进行处理任务 sqrt() :
stress -c 4 -t 30
可以立即看到 vmstat 结果中 r
列,立即会显示 >= 4 个任务在进行。
IO 密集型任务
使用 2 个 worker 进行 sync():
stress -i 2 -t 30
立即就能看到 IO 中 bi
和 bo
成倍上涨。
或者使用 -d
选项,读写 HDD
stress -d 2 -t 10
大量内存使用
使用 2 个工作 worker 进行 malloc()
和 free()
,占用 4G 内存 20 秒:
stress -m 2 --vm-bytes 256M -t 20
能看到 memory 中 free 下降,另外如果计算机内存比较小,千万慎重,如果要测试一定使用超时机制,否则可能直接卡死系统。
当系统内存不足时,有几种表现:
- 在 Memory 列,free memory 减少,回收 buffer 和 cacher 也无济于事,大量使用交换分区(swpd), 页面交换(swap)频繁
- IO 方面,读写磁盘数量(io)增多
- 系统缺页中断(in)增多,上下文切换(cs)次数增多
- 等待 IO 的进程数(b)增多,大量 CPU 时间用于等待 IO(wa)