1. vmstat介绍
vmstat
是一个常用的系统性能监控工具,可以查看虚拟内存统计信息、进程、CPU活动等。通过该工具,我们可以了解系统的整体运行情况,包括CPU的使用率、内存的使用情况以及磁盘I/O等。
1.1 vmstat帮助
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 参数介绍
[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核心数
cat /proc/cpuinfo|grep processor|wc -l
cat /proc/cpuinfo|grep processor|wc -l