vmstat命令可以动态地查看系统资源的使用情况,如内存/交换分区/CPU的使用情况,通过使用该命令可以判断系统的瓶颈在哪里:
[root@mysql ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 0 569308 3144 285248 0 0 34 4 31 41 0 0 99 0 0
表示每隔一秒钟采集一次,总共采集五次
vmstat 1 5
[root@mysql ~]# vmstat 1 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- # 分别表示: r b swpd free buff cache si so bi bo in cs us sy id wa st # procs --- 进程信息 1 0 0 569144 3144 285248 0 0 34 4 31 40 0 0 99 0 0 # memory --- 内存的使用情况 0 0 0 569152 3144 285248 0 0 0 0 41 36 0 0 100 0 0 # swap --- 交换分区的使用情况 0 0 0 569160 3144 285248 0 0 0 0 23 25 0 0 100 0 0 # io --- 系统IO读写情 0 0 0 569160 3144 285248 0 0 0 0 17 15 0 0 100 0 0 # system --- 系统相关的信息 0 0 0 569160 3144 285248 0 0 0 0 21 23 0 0 100 0 0 # cpu --- CPU的使用情况(百分比的形式
Procs
r:等待运行的进程数,或者说运行队列,如果这个值长期大于1,表示CPU一直处于繁忙的状态,可以考虑加CPU了
b:表示等待IO的进程数,也就是被阻塞的进程数
Memory
swpd:虚拟内存使用情况,单位是K,如果这个值一直大于零,则表明物理内存不足
free:表示空闲的物理内存的大小,单位:KB/秒
buff:用作缓冲的内存大小,单位:KB/秒
cache:用作缓存的内存大小,单位:KB/秒
Swap
si:每秒从交换分区写到内存的大小,由磁盘调入内存,如果这个值一直大于零,则表明物理内存不足
so:每秒写入交换分区的内存大小,由内存调入磁盘,如果这个值一直大于零,则表明物理内存不足
IO
bi:block in,表示从磁盘中拿出来,然后读到内存的数据块的大小,也就是读操作,单位是K
bo:block out,表示从内存中拿出来,然后写到磁盘的数据块的大小,也就是写操作,单位是K
System
in:表示每秒CPU的中断次数,包括时钟中断
cs:表示每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换
CPU
us:用户正在运行的进程占用CPU的百分比
sy:系统正在运行的进程占用CPU的百分比
id:空闲的CPU的百分比,us + sy + id 三者的百分比相加等于 100%
wa:用于等待I/O的CPU时间所占的百分比,这个值很高时,说明IO等待比较严重
st:被偷走的CPU百分比,如果使用到虚拟化,虚拟机就会使用到一部分CPU,这个值一般不用理会