Linux中vmstat参数详解

常使用的命令:

#vmstat 1 每1秒输出一次

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     4009732   395568   1587572       0    0      0     8         726  740     1   1  97  0  0

r:运行队列的值,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。经常大于1,表示cpu不足,大于3表示负载过高,大于5表示重负载,大于10可以认定为不正常了。

b:等待资源的进程数(或者说阻塞的进程数),一般表现为I/0瓶颈,也有可能是内存交换等。

swpd:切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常.

free:当前的空闲页面列表中内存数量(k表示)

buff:作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。

cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

si:由内存进入内存交换区数量。(单词in),该值和memory中的swpd相关

so:由内存交换区进入内存数量。(单词 out),该值和memory中的swpd相关

bi 从块设备读入数据的总量(读磁盘)(每秒kb)。

bo 块设备写入数据的总量(写磁盘)(每秒kb)

in:列表示在某一时间间隔中观测到的每秒设备中断数。

cs:每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us:列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy:列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id :空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wa:列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。等待IO CPU时间。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>