linux性能检测之vmstat详解
# yum -y install sysstat #vmstat和iostat命令集成在sysstat(系统监视工具)包里面。
一、vmstat介绍
1.1 vmstat简介
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,你需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果。
1.2 vmstat命令格式
vmstat [-a] [-n] [-t] [-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]
1.3 vmstat选项
-a : 显示活跃和非活跃内存
-f : 显示自启动以来的fork数。这包括fork,vfork和clone系统调用,相当于创建的任务总数。每个过程,由一个或多个任务发送,取决于线程使用。
-t : 在每条信息的末尾,显示收集信息的时间
-m :显示slabinfo,slabinfo信息记录在/proc/slabinfo文件中。slab是linux的一个内存分配机制。
-n : 只在开始时显示一次字段名,针对多次收集信息的情况输出人性化一点。
-s : 显示内存相关的统计信息。
delay是以秒为单位的更新之间的延迟。如果未指定延迟,则自引导以来仅打印一个报告的平均值。
count是更新的数量。如果未指定计数并定义延迟,则计数默认为无穷大。
-d:报告磁盘统计信息。
-w:对于大内存大小,放大字段宽度。
-p:后跟一些分区名称以获取详细统计信息。
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V :显示vmstat版本信息。
博文来自:www.51niux.com
1.4 VM模式的说明
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2997244 170352 446800 0 0 0 1 2 4 0 0 100 0 0
进程:
#r:运行队列,当这个值超过cpu的数量,就会出现CPU瓶颈了。
#b:阻塞的(I/O)进程数量。
内存:
#swpd:所使用的虚拟内存量。0是状态良好,如果大于0说明物理内容不足或者程序内存泄露了。
#free :空闲内存的数量。默认但是为KB。
#buff: 用作缓冲区的内存量。通常缓存着写进的数据。
#cache:用作缓冲区的内存量。通常缓存着读的数据。
swap分区:
#si:从磁盘交换的内存量(/ s)。每秒从磁盘读入虚拟内存的大小。如果大于0说明内存里的数据在向swap分区写东西,说明物理内存可能不够用或者内存泄露了。
#so : 每秒虚拟内存写入磁盘的大小。如果值大于0,同上。
#bi:从块设备接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。这里是读磁盘。
#bo:发送到块设备的块(块/ s)。每秒写入的块数。这里是写磁盘。
系统:
#in:每秒CPU的中断次数,包括时间中断。
#cs:每秒产生的上下文切换次数,in和cs这两个值越大,内核消耗cpu时间越大
CPU:
#us : 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
#sy : 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
#id:空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
#wa: IO等待时间。以百分比表示。如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
#st: 虚拟机占用的时间百分比。
博文来自:www.51niux.com
二、示例
2.1 刷新频率
#vmstat 2 2 #这里的意思是每隔2秒刷新一次,输出两次之后结束。
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 3304480 728000 176748 8224960 0 0 6 126 0 0 9 1 90 0 0
1 0 3304480 727976 176748 8224960 0 0 0 330 5481 5745 23 2 75 0 0
#vmstat 1 #这里是每隔1分钟舒心一次,如果不CTRL+C强制退出的话,会一直刷新
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 3304396 715684 176784 8236880 0 0 6 126 0 0 9 1 90 0 0
0 0 3304396 716228 176784 8236880 0 0 0 32 1062 535 7 0 93 0 0
0 0 3304396 716360 176784 8236880 0 0 0 16 889 447 6 0 93 0 0
1 0 3304396 715996 176784 8236880 0 0 0 112 1251 567 10 0 90 0 0
1 0 3304396 716120 176784 8236880 0 0 0 172 1360 813 9 0 91 0 0
0 0 3304396 716120 176784 8236880 0 0 0 48 622 534 3 0 97 0 0
^C
2.2 显示活跃与非活跃内存
# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
0 0 0 2996500 109608 531848 0 0 0 1 2 4 0 0 100 0 0
#inact为不活跃内存,单位是KB
#active为活跃内存
2.3 显示fork数量
# vmstat -f
29268 forks
2.4 -t参数的使用
# vmstat -t 2 2 #在每条信息的尾部显示收集信息的时间
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2996624 170356 447988 0 0 0 1 2 4 0 0 100 0 0 2017-03-21 14:36:19 CST
0 0 0 2996484 170356 447988 0 0 0 16 69 46 0 0 100 0 0 2017-03-21 14:36:21 CST
2.5 -s 显示内存的统计信息
# vmstat -s #现在再加刷新频率的参数啊输出几次啊,是不起作用的。这些信息的分别来自于/proc/meminfo,/proc/stat和/proc/vmstat。
3866672 total memory
870668 used memory
532028 active memory
109608 inactive memory
2996004 free memory
170356 buffer memory
448148 swap cache
4296700 total swap
0 used swap
4296700 free swap
151380 non-nice user cpu ticks
1536 nice user cpu ticks
164499 system cpu ticks
761187647 idle cpu ticks
41213 IO-wait cpu ticks
164 IRQ cpu ticks
17221 softirq cpu ticks
3753 stolen cpu ticks
347420 pages paged in
5550218 pages paged out
0 pages swapped in
0 pages swapped out
100823150 interrupts
73452064 CPU context switches
1488174820 boot time
29313 forks
2.6 -w和不加-w的区别
# vmstat -w
procs -------------------memory------------------ ---swap-- -----io---- --system-- -----cpu-------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2995880 170356 448152 0 0 0 1 2 4 0 0 100 0 0
# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 2996004 170356 448152 0 0 0 1 2 4 0 0 100 0 0
2.7 -d打印磁盘信息和-n只在开始时显示一次字段名和-p的用法
#vmstat -d 1 -n #信息来源于/proc/diskstats,-n用在这里可以让其只显示一次字段名
# vmstat -p /dev/vda3 1 5
vda3 reads read sectors writes requested writes
15953 666578 927210 11103888
15953 666578 927210 11103888
15953 666578 927210 11103888
15953 666578 927210 11103888
15953 666578 927210 11103888
#reads:来自于这个分区的读的次数
#read sectors:来自于这个分区的读扇区的次数
#writes:来自于这个分区的写的次数
#requested writes:来自于这个分区的写请求次数
2.8 -S的使用
#vmstat 2 2 -S M #让内存以MB的形式显示
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 821 194 2900 21557 0 0 199 72 0 0 2 1 97 0 0
0 0 821 194 2900 21531 0 0 11264 196 1837 1439 0 2 98 0 0