linux命令---vmstat

概述

vmstat命令: 是一个查看虚拟内存(Virtual Memory)使用状况的工具,用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况

vmstat

linux命令---vmstat_第1张图片

选项

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

字段说明

字段 含义
r 表示运行队列,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了2.5就比较高,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,等待IO的进程数量
swpd 虚拟内存已使用的大小,如果大于0,需要配合si和so来考察是否真的内存不足:si,so的值长期为0,这种情况不会影响系统性能
free 空闲的物理内存的大小
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
cache cache给文件做缓冲,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小
si 每秒从磁盘读入虚拟内存的大小,如果这个值长时间大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
so 每秒虚拟内存写入磁盘的大小,如果这个值长时间大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小通过命令查/sbin/tune2fs -l /dev/sda1
bo 块设备每秒发送的块数量。不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速
sy 系统CPU时间,如果太高,表示系统调用时间长,说明系统内核消耗的CPU资源多,这并不是良性表现
id 空闲 CPU时间,一般来说,id + us + sy = 100。
wa 等待IO CPU时间wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)

*注意:* 内存够用的时候,si/so这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。
系统调用导致上下文切换,每次调用系统函数,代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数

常见问题及处理

1、检查CPU是否满足应用场景:r经常大于逻辑核数的3倍,且id经常少于30,表示cpu的负荷很重,需要借助其他工具下钻程序占用CPU的情况。
2、检查内存是否满足应用场景:si,so长期不等于0,表示内存不足,需要借助其他工具下钻程序占用MEM的情况,如是JVM需要分析堆。如果si、so长期>0,系统性能回收影响,磁盘io和CPU资源会被耗尽;评估内存是否够用不能只看free,而是要结合这俩个值,si、so很小或者长期为0说明够用,否则内存不足
3、检查磁盘是否满足应用场景:查询块的默认块的大小,根据bi/bo计算 读写速度/s,对比磁盘的读写速度(使用的磁盘阵列和转速计算或者用io测试工具测试获得),若接近磁盘的读写速度,且队列或者CPU过高,表示io性能不好,需要考虑优化io或者升级磁盘设备。随机磁盘读写的时候,值越大,CPU在IO等待的时间也就越大
4、上下文切换和中断,一般这两个指标分不开。context switch过高,会导致CPU像个搬运工,频繁在寄存器和运行队列直接奔波 ,更多的时间花在了线程切换,而不是真正工作的线程上。直接的消耗包括CPU寄存器需要保存和加载,系统调度器的代码需要执行。间接消耗在于多核cache之间的共享数据;测试上下文的耗时可以使用工具LMbench,总得来说这两个值越大,内核消耗CPU的时间越多。
5、空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。
6、wa高:说明IO等待严重,可能是磁盘的大量的随机读写造成的,也有可能是磁盘的带宽出现瓶颈(块操作)

题外话(对常见问题4补充):
现在linux是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个任务,这个过程叫做上下文切换。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。

对于抢占式操作系统而言引起上下文切换的原因, 大体有几种:
1)当前任务的时间片用完之后,系统CPU正常调度下一个任务;
2)当前任务碰到IO阻塞,调度线程将挂起此任务,继续下一个任务;
​3)多个任务抢占锁资源,当前任务没有抢到,被调度器挂起,继续下一个任务;
4)用户代码挂起当前任务,让出CPU时间;
5)硬件中断

LMbench主要是带宽(读取缓存文件、内存拷贝、读写内存、管道等)和反应时间(上下文切换、网路、进程创建等)的评测工具。
LMbench如何测量进程切换的时间:首先是看任务处理的时间(通过一次任务处理,这个任务处理的时间被定义为token时间,不包括线程切换的)。然后多次执行,排除任务执行的时间,然后计算出CS的时间(如果有cache miss,则CS的时间也包括cache misses的时间)。

原文链接

欢迎拍砖~未完待续……

你可能感兴趣的:(Linux,命令,性能测试,linux,内存,cpu,vmstat,性能)