vmstat
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
1、语法:
vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V] -a:显示活跃和非活跃内存 -n:只在开始时显示一次各字段名称 -m:显示slabinfo -s:显示内存相关统计信息及多种系统活动数量 -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes) delay:刷新时间间隔。如果不指定,只显示一条结果。 count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。 -f:显示从系统启动至今的fork数量 。 -d:显示磁盘相关统计信息。 -p:显示指定磁盘分区统计信息 -V:显示vmstat版本信息。
2、示例:每隔2秒输出一次结果,抓取5次
3、各列参数含义:
类别 | 参数 | 含义 | 备注 |
procs(进程) | r | 运行队列中进程数量 | |
b | 等待IO的进程数量 | ||
memory(内存) | swpd | 使用虚拟内存大小,单位k | 如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能 |
free | 空闲物理内存大小 | ||
buff | 用作缓冲的内存大小 | 对块设备的读写进行缓冲 | |
cache | 用作缓存的内存大小 | 文件系统的cache;如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小 | |
swap | si | 每秒从交换区写到内存的大小,由磁盘调入内存,单位:kb/s | 内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗;如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。 |
so | 每秒写入交换区的内存大小,由内存调入磁盘 | ||
io | bi | 每秒读取的块数 | 块设备每秒接收的块数量,单位是block,这里的块设备是指系统上所有的磁盘和其他块设备,现在的Linux版本块的大小为1024bytes |
bo | 每秒写入的块数 | 设备每秒发送的块数量,单位是block;随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大 | |
system(系统) | in | 每秒中断数,包括时钟中断 |
这两个值越大,会看到由内核消耗的cpu时间sy会越多 每秒上下文切换次数,例如调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目 |
cs | 每秒上下文切换数 | ||
cpu(以百分比显示) | us | 用户进程执行时间百分比(user time) | us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么该考虑优化程序算法或者进行加速 |
sy | 内核系统进程执行时间百分比(system time) | sy的值过高时,说明系统内核消耗的cpu资源多,这个不是良性的表现,应该检查原因;这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足 | |
id | 空闲时间百分比(包括io等待时间) | 一般来说 us+sy+id=100 | |
wa | IO等待时间百分比 | wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作) | |
st | 虚拟机使用的cpu时间 |
4、活跃和非活跃内存
vmstat -a 2 5 【-a 显示活跃和非活跃内存,所显示的内容除增加inact和active】
inact:非活跃内存大小,即被标明可回收的内存,区别于free和active
active:活跃的内存大小
5、常见问题及分析:
1、如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。
2、如果bi,bo 长期不等于0,表示内存不足。
3、r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了。
查看CPU核心数:cat /proc/cpuinfo|grep processor|wc -l
当r值超过了CPU个数,就会出现CPU瓶颈,解决方法:增加CPU个数和核数;通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进而平衡系统任务;调整已有任务的优先级
4、通过vmstat识别CPU满负荷:
vmstat中CPU的度量是百分比的,当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。
唯一能够确定CPU瓶颈的还是r(运行队列)的值。