注:本博文主要讲解vmstat命令结果中各参数的含义,在学习的过程中,总是不能够清楚的了解这些参数的含义,所以自己稍微记录一下,本人认为知道各参数的含义是学习linux或者性能分析的基础,至于如何分析,本人还在学习中……
vmstat主要是用来检测virtual memory(虚拟内存)的。
下面首先来看一下执行这个命令的截图:
各参数的含义
procs
r:可运行队列的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用;
b:被 blocked 的进程数,正在等待 IO 请求;
memory
swpd:已使用的 SWAP 空间大小,KB 为单位;
free:可用的物理内存大小,KB 为单位;
buff:物理内存用来缓存读写操作的 buffer 大小,KB 为单位;
cache:物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;
swap
si:数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位;
so:数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位;
io
bi:磁盘块从文件系统或 SWAP 读取到 RAM(blocks in)的大小,block 为单位;
bo:磁盘块从 RAM 写到文件系统或 SWAP(blocks out)的大小,block 为单位;
system
in:被处理过的中断数
cs:系统上正在做上下文切换的数目
cpu
us:用户占用 CPU 的百分比;
sy:内核和中断占用 CPU 的百分比
id:CPU 完全空闲的百分比
wa:所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比;
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown. 来自于虚拟机偷取的CPU所占的百分比
[加粗字体为本人容易遗忘的参数释义]
简单分析
procs r: 运行的进程比较多,系统很繁忙,展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
swap:如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
si,so:这两个值越大,会看到由内核消耗的cpu时间会越多。注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
bi/bo::磁盘写的数据量稍大,如果是大文件的写,10M以内基本不用担心,如果是小文件写2M以内基本正常
cpu us::us的值比较高时,说明用户进程消耗的cpu时间多,如果持续大于50%,服务高峰期可以接受, 如果长期大于50 ,可以考虑优化
cpu sy::现实内核进程所占的百分比,sys的值过高时,说明系统内核消耗的cpu资源多,这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
cpu wa: 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
cpu id: CPU 空闲时所占百分比 平常持续小于50,服务高峰期可以接受
常见问题处理
如果r经常大于4,且id经常少于40,表示cpu的负荷很重。
如果bi,bo长期不等于0,表示内存不足。
如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。
1.)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。
2.)如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。
3.)如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。
解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象.
内存问题现象:
内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.
解决办法:
1.调节applications & servers使得对内存和cache的使用更加有效.
2.增加系统的内存.
Implement priority paging in s in pre solaris 8 versions by adding line “set priority paging=1” in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.
关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。