常用linux命令定位线程频繁切换问题——vmstat

22 阅读3分钟

一、vmstat

vmstat \\ 默认情况下只输出一条记录

65C09C0172630CDA7B94C4ED8AFF4BC9.jpg

vmstat主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使用率内存使用率虚拟内存交换情况IO读写情况等。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

vmstat 2 2       #2表示每隔两秒采集一次服务器状态,2表示采集2次

AA23093F6FEDAC2C491B5FD50536482A.jpg

参数含义

参数含义
procs:r运行队列中进程的数量,这些进程都是可运行状态,都在等待CPU的分配。当这个值超过了CPU数目,就会出现CPU瓶颈,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高
procs:b被blocked(阻塞)的进程数,正在等待IO
memory:swpd使用的虚拟内存的大小,单位是KB。解释:如果该值大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
memory:free可用的物理内存大小,单位是KB
memory:buff物理内存用来缓存读写操作的buffer大小,单位是KB
memory:cache物理内存用来缓存进程地址空间的cache大小,单位是KB
swap:si(换入)每秒从SWAP(交换分区)读入到RAM(swap in)的大小,单位是KB
swap: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磁盘块)为单位
io:bo每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位。解释:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system:in每秒的中断数
system:cs系统每秒进行上下文切换的次数
cpu:us用户空间占用CPU的百分比。解释:us的值比较高时,说明用户进程消耗的CPU时间比较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进行加速。
cpu:sy内核空间占用CPU的百分比。解释:sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
cpu:idCPU空闲的百分比
cpu:waCPU等待IO的百分比解释:wa的值高时,说明CPU等待IO的时间比较多,这可能是大量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈。
cpu:st来自于虚拟机偷取的CPU所占的百分比

vmstat命令常用的选项如下

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