本文主要介绍对Linux系统的CPU、内存、磁盘和网络四个方面性能评估的vmstat工具
vmstat命令
vmstat是virtual memory statistics(虚拟内存统计)的缩写,很多Linux发行版本都默认安装了此命令工具,利用vmstat可以对操作系统的进程、内存、分页、块 IO、traps、磁盘和 CPU 活动进行监视,不足之处是无法像top命令对某个进程进行深入分析。
vmstat语法如下:
vmstat [options] [delay [count]]复制
常用参数含义:
-n:周期性输出监控信息时,头部信息只输出一次
delay:更新之间的延迟,以秒为单位。如果没有指定延迟,只打印一次系统启动后的平均值
count:更新的次数。在没有计数的情况下,当定义延迟时,默认是无限
例如:
#每隔3秒打印一次信息
vmstat 3
#每隔三秒打印一次信息,共打印5次
vmstat 3 5复制
上图各字段解释:
procs:显示进程状态
r:表示运行和等待CPU时间片的进程数,如果这个值长期大于系统CPU的个数,说明CPU不足,需要增加CPU
b:表示阻塞等待I/O完成的进程数量
memory:显示内存状态
swpd:表示虚拟内存使用量,单位KB。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,就不会影响性能
free:表示空闲的物理内存使用量,单位KB
buff:表示buffers cache内存数量,一般对块设备的读写才需要缓冲
cache:表示page cached的内存数量,一般作为文件系统cached,频繁访问的文件都会被cached。如果cache值较大,说明cached文件数较多,如果此时I/O中bi比较小,则说明文件系统效率较好
buffer:缓冲区,buffer是实时生成的数据流,先放入buffer中的数据一定会被先读取,所以访问有明显的顺序特性。常用于流量整形,当数据量大时,流量分割成多块buffer处理;小数据量时,流量要塞满buffer进行处理。如果某设备处理4K的数据量效率最高,则通过buffer把数量分割成4K大小进行处理。
cache:缓存,cache是系统两端处理速度不匹配时的一种折中策略。因为CPU寄存器和磁盘之间访问速度差异巨大,而通过使用存储系统分级的策略可以减小这种差异带来的影响。数据保存在cache中是为了减少块设备的读取总量,先放入cache中的数据可能因为没有被读取,而被清除掉,所以访问有明显的随机性。
swap:显示交换分区/虚拟内存的使用状态
si:表示每秒从磁盘写入到虚拟内存/交换区的数据量(KB/S)
so:表示每秒从虚拟内存/交换区读出到磁盘的数据量(KB/S)
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示物理内存不足或者存在内存泄露。
内存泄露是指程序未释放内存,逐渐积累,导致系统整体性能下降。
io:显示磁盘读写状况
bi:表示每秒从块设备读入到内存的块数(blocks/s)
bo:表示每秒从内存写入到块设备的块数(blocks/s)
system:显示采集间隔内发生的中断数
in:表示每秒中断数,包括时钟中断
cs:表示每秒上下文切换的次数
频繁中断和切换上下文会导致内核消耗大量CPU资源。这两个值要越小越好,如果过大,要考虑减少我们应用的线程数
cpu:显示CPU使用状态
us:表示用户进程消耗CPU时间的百分比,日常监控的重点
sy:表示内核进程消耗CPU时间的百分比
id:表示CPU处于空闲状态时间的百分比
wa:表示I/O等待时间的百分比
us的值高时,说明用户进程消耗CPU时间多,可能是处于业务高峰期或程序需要优化;sy的值高时,说明系统内核消耗的CPU资源多;wa的值高时,说明I/O等待越严重,I/O等待可能是磁盘存在大量随机读写造成的,也可能是磁盘宽瓶颈造成的应该检查具体原因健康的CPU状态应该保证(us+sy)<80%,wa<20%。