Skip to content

1. vmstat介绍

vmstat是一个常用的系统性能监控工具,可以查看虚拟内存统计信息、进程、CPU活动等。通过该工具,我们可以了解系统的整体运行情况,包括CPU的使用率、内存的使用情况以及磁盘I/O等。

1.1 vmstat帮助

bash
vmstat --help
vmstat --help
选项功能
-a显示活跃和非活跃内存
-f显示从系统启动至今的fork数量
-m显示slabinfo
-s显示内存相关统计信息及多种系统活动数量
-d显示磁盘相关的统计信息
-S使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes)
delay刷新时间间隔,如果不指定,只显示一条结果
count刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷

1.2 参数介绍

bash
[root@ansible ~]# vmstat  2 1 #2表示每隔两秒采集一次服务器状态,1表示只采集一次,如果不写1,一直采集
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      0 980648   2112 847376    0    0   146    14   71  172  0  1 99  0  0
[root@ansible ~]# vmstat  2 1 #2表示每隔两秒采集一次服务器状态,1表示只采集一次,如果不写1,一直采集
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      0 980648   2112 847376    0    0   146    14   71  172  0  1 99  0  0

procs

r:表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b:被blocked(阻塞)的进程数,正在等待IO

memory

swpd:使用的虚拟内存的大小,单位是KB,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free # 空闲的物理内存的大小

buff #Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存

cache #cache直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

swap

si(换入):每秒从SWAP(交换分区)读入到RAM(swap in)的大小,单位是KB

so(换出):每秒从RAM写出到SWAP(swap out)的大小,单位是KB

内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。有些朋友看到空闲内存(free)很少时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响。

io

bi:每秒从文件系统或SWAP读入到RAM(blocks in)的块数,block(1KB磁盘块)为单位

bo:每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位

system

in:每秒的中断数

cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目

cpu

us:用户空间占用CPU的百分比,us的值比较高时,说明用户进程消耗的CPU时间比较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进行加速。

sy:内核空间占用CPU的百分比,sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

id:CPU空闲的百分比,空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率

wa:CPU等待IO的百分比,wa的值高时,说明CPU等待IO的时间比较多,这可能是大量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈

st:来自于虚拟机偷取的CPU所占的百分比

❌ 注意

procs r: 运行的进程比较多,系统很繁忙

bi/bo: 磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常

cpu us: 持续大于50%,服务高峰期可以接受, 如果长期大于50 ,可以考虑优化

cpu sy: 现实内核进程所占的百分比,这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。

cpu wa: 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的, 也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)

1.3 查看cpu核心数

bash
cat /proc/cpuinfo|grep processor|wc -l
cat /proc/cpuinfo|grep processor|wc -l