Linuxvmstat命令详解
⼀、vmstat命令介绍
vmstat主要是⽤来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使⽤率,内存使⽤率,虚拟内存交换情况,IO 读写情况等。⼀般vmstat⼯具的使⽤是通过两个数字参数来完成的,第⼀个参数是采样的时间间隔数,单位是秒,第⼆个参数是采样的次数,如:
➜ test vmstat 21 #2表⽰每隔两秒采集⼀次服务器状态,1表⽰只采集⼀次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
10054037444452688211656000700129700
在实际应⽤过程中,我们会在⼀段时间内⼀直监控,不想监控直接结束vmstat就⾏了,例如:
➜ test vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
10053972444452688221524000700129700
1005394448445268822156800011442737854129800
00053943004452688221580000235906823019800
000539252044526882215800003242327807029800
000539251644526882216880006644008066129800
上⾯的命令表⽰vmstat每2秒采集⼀次数据,⼀直采集,直到我结束程序。vmstat命令常⽤的选项如下:
选项功能
-a显⽰活跃和⾮活跃内存
-f显⽰从系统启动⾄今的fork数量
-m显⽰slabinfo
-
s显⽰内存相关统计信息及多种系统活动数量
-d显⽰磁盘相关的统计信息
-S使⽤指定单位显⽰。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes) delay刷新时间间隔,如果不指定,只显⽰⼀条结果
count刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为⽆穷
1.1、vmstat各个参数的含义
procs
r:运⾏队列中进程的数量,这些进程都是可运⾏状态,都在等待CPU的分配
解释:当这个值超过了CPU数⽬,就会出现CPU瓶颈,如果运⾏队列过⼤,表⽰你的CPU很繁忙,⼀般会造成CPU使⽤率很⾼
b:被blocked(阻塞)的进程数,正在等待IO
memory
swpd:使⽤的虚拟内存的⼤⼩,单位是KB
解释:如果该值⼤于0,表⽰你的机器物理内存不⾜了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
free:可⽤的物理内存⼤⼩,单位是KB
buff:物理内存⽤来缓存读写操作的buffer⼤⼩,单位是KB
cache:物理内存⽤来缓存进程地址空间的cache⼤⼩,单位是KB
swap
si(换⼊):每秒从SWAP(交换分区)读⼊到RAM(swap in)的⼤⼩,单位是KB
so(换出):每秒从RAM写出到SWAP(swap out)的⼤⼩,单位是KB
解释:内存够⽤的时候,这2个值都是0,如果这2个值长期⼤于0时,系统性能会受到影响。有些朋友看到空闲内存(free)很少时,就认为内存不够⽤了,不能光看这⼀点,还要结合si和so,如果free很少,但是si和so也很少(⼤多时候是0),那么不⽤担⼼,系统性能这时不会受到影响。
io
bi:每秒从⽂件系统或SWAP读⼊到RAM(blocks in)的块数,block(1KB磁盘块)为单位
bo:每秒从RAM写出到⽂件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位
解释:随机磁盘读写的时候,这2个值越⼤(如超出1024k),能看到CPU在IO等待的值也会越⼤。
system
in:每秒的中断数
cs:系统每秒进⾏上下⽂切换的次数
解释:cs表⽰每秒上下⽂切换的次数,例如,当我们调⽤系统函数,就要进⾏上下⽂切换;当进⾏线程的切换,也要进⾏上下⽂切换,这个值越⼩越好。例如在apache和nginx这种web服务器中,我们⼀般做性能测试时会进⾏⼏千并发甚⾄⼏万并发的测试,选择web服务器的进程可以由进程或者线程的峰值⼀直下调,压测,直到cs到⼀个⽐较⼩的值,这个进程或线程数就是⽐较合适的值了。系统调⽤也是如此,每次调⽤系统函数,我们的代码就会进⼊到内核空间(内核态),导致上下⽂切换,这个过程很耗资源,所以要尽量避免频繁的系统调⽤。上下⽂切换次数过多表⽰你的CPU⼤部分时间浪费在上下⽂切换中,导致CPU⼲正经事的时间少了。
cpu
us:⽤户空间占⽤CPU的百分⽐
解释:us的值⽐较⾼时,说明⽤户进程消耗的CPU时间⽐较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进⾏加速。
sy:内核空间占⽤CPU的百分⽐
解释:sy的值⾼时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
id:CPU空闲的百分⽐
wa:CPU等待IO的百分⽐
解释:wa的值⾼时,说明CPU等待IO的时间⽐较多,这可能是⼤量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈。
st:来⾃于虚拟机偷取的CPU所占的百分⽐
1.2、vmstat命令使⽤实例
【例1】显⽰活跃和⾮活跃内存
➜ test vmstat -a 1 #每秒输出⼀次信息
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
200538806449198243586956000701129700
100538807249198243587040000036076841119800
000538782449198363587388000037617198129800
100538782449198363587388000035586897119800
100538901249198523587388000036996932129800
⼆、虚拟内存相关知识
在系统中运⾏的每个进程都需要使⽤到内存,但并不是所有的进程每时每刻都会使⽤到内存。当系统
运⾏所需内存超过实际的物理内存时,系统内核会释放某些进程所占⽤但未使⽤的部分或所有物理内存,将这部分数据存储在磁盘上直到进程下⼀次调⽤,并将释放出的内存提供给有需要的进程使⽤。在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使⽤的页⾯换到磁盘上,把活动页⾯保留在内存中供进程使⽤。⽽交换是将整个进程,⽽不是部分页⾯,全部交换到磁盘上。分页(Page)写⼊磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要⼀个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发⽣了分页错误(Page Fault)。当系统内核发现可运⾏内存变少时,就会通过Page-Out来释放⼀部分物理内存。尽管Page-Out不是经常发⽣,但是如果Page-Out频繁不断地发⽣,直到当内核管理分页的时间超过了运⾏程序的时间时,系统性能会急剧下降。这时的系统已经运⾏的⾮常慢或进⼊暂停状态,这种状态也被称作thrashing(颠簸)。
三、总结
vmstat是⼀个服务器监控命令,通过vmstat可以看到CPU和内存的使⽤情况。⽬前说来,对于服务器监控有⽤处的度量主要有:
r(运⾏队列)
pi(页导⼊)
us(⽤户CPU)
sy(系统CPU)
id(空闲CPU)
通过vmstat来识别CPU瓶颈:
r(运⾏队列)展⽰了正在执⾏和等待CPU资源的任务个数,当这个值超过了CPU数⽬,就会出现CPU瓶颈。
Linux下查看CPU核⼼数的命令:
cat /proc/cpuinfo|grep processor|wc -l
解决CPU瓶颈的办法如下:
nginx停止命令1. 增加CPU个数或核数(推荐)
2. 调整任务的执⾏时间,如把⼤任务放到系统不繁忙的时候进⾏,进⽽平衡系统的任务。
3. 调整已有任务的优先级
通过vmstat识别CPU满负荷:
⾸先需要声明⼀点的是,vmstat中CPU的度量是百分⽐的。当us+sy的值接近100的时候,表⽰CPU正在接近满负荷⼯作。但要注意的是,CPU满负荷⼯作并不能说明什么,Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最⼤化。唯⼀能够确定CPU瓶颈的还是
r(运⾏队列)的值。
通过vmstat识别内存瓶颈:
当内存的需求⼤于实际的物理内存时,服务器就会启动虚拟内存机制,通过虚拟内存,可以将内存段移到SWAP DISK的特殊磁盘段上,这样就会出现虚拟内存的页导⼊和页导出现象。页导出并不能说明出现了内存瓶颈,虚拟内存系统经常会对内存段进⾏页导出,但是页导⼊操作就表明服务器需要更多的内存了,页导⼊需要从SWAP DISK上将内存段复制回内存,导致服务器速度变慢。
解决内存瓶颈的办法如下:
1. 最简单的,增加内存(推荐)
2. 改⼩SGA,使得对内存的需求减少
3. 改⼩PGA,使得对内存的需求减少
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论