详解vmstat使用方法

vmstat((virtual memory statistics)是虚拟内存统计信息命令的缩写。使用vmstat命令可以监视系统
的内存使用情况。它可以显示有多少虚拟内存,有多少是free的的和有多少是分页活动的。包括page-ins
and page-outs的情况。这对于检测物理内存不足非常有用。使用vmstat同样可对操作系统的进程、IO读写
、CPU活动等进行监视。可对系统的整体情况进行统计,但是无法对某个进程进行更深入的分析。
使用vmstat命令如果不加任何参数,则只给出这一行输出,这个输出是对系统自启动以来的状态总结。对于
性能问题,它通常不是很有用,特别是如果系统已经运行了很长时间。然而,它可能仍然包含关于过去发生
但目前没有发生的事件的有用信息。
vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 497460 2688 6537552 0 0 10 9 6 9 8 2 90 0 0
vmstat输出不仅包含内存统计信息。与iostat和mpstat一样,vmstat接受interval和count参数。下面的
例子以5秒为间隔运行3个报表:
vmstat 5 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 497696 2688 6537396 0 0 10 9 10 17 8 2 90 0 0 1 0 0 497808 2688 6537388 0 0 0 0 3100 6757 10 3 87 0 0 0 0 0 497808 2688 6537388 0 0 0 4 3137 6947 10 3 87 0 0
vmstat输出分为六个部分:
   ● procs
   ● memory
   ● swap
   ● io
   ● system
   ● cpu

逐项分解:
r b swpd free buff cache si so bi bo in cs us sy id wa st
procs:
前两列给出了有关进程的信息:
r: 处于等待状态的进程数。这些进程什么也不做,只是等待运行。
b: 自上次更新以来处于睡眠模式并被中断的进程的数量

memory:
接下来的四列给出了关于内存的信息:
swpd: 已使用的虚拟内存大小
free: 空闲的物理内存的大小
buff: 用来做buffer(缓存,主要用于块设备缓存)的内存数,单位:KB
cache: 用来做cache(缓存,主要用于缓存文件)的内存,单位:KB

swap:
下面两列给出了关于swap的信息:
si: 从磁盘交换的内存的交换页数量(KB/每秒)
so: 从内存交换到磁盘的交换页数量(KB/每秒)
如果si/so为非零数字表明没有足够的物理内存,内核正在将内存交换到磁盘。

io:
下面两列给出了关于I/O(输入-输出)的信息:
bi: 每秒从块设备接收的块数,读速度,块数/每秒
bo: 每秒发送到块设备的块数,写速度,块数/每秒

system:
下面两列给出了关于系统的信息:
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数

cpu:
最后五列给出了CPU总时间的百分比:
us: 花费在用户进程上的CPU周期百分比,用户CPU时间(非内核进程占用时间)
sy: 用于系统(内核)进程的CPU周期百分比,系统使用的CPU时间
id: 空闲CPU周期的百分比,空闲的CPU的时间
wa: 等待I/O的CPU周期百分比
st: 从虚拟机窃取的CPU周期百分比
命令行选项
通过为vmstat命令提供不同的选项,可以包括其他信息。下面列出了一些常用命令行选项:
-a 开启显示active/inactive memory。
-f 显示此系统启动以来的forks的总数,包括fork、vfork和clone system calls
-t 向输出添加时间戳
-d 显示磁盘统计数据
内存瓶颈
分析内存相关问题应该从检查vmstat输出中的空闲内存数量开始,该输出位于第四列。如果空闲内存不足,
我们需要更多地研究哪个进程消耗了更多的内存。
vmstat 1 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 498004 2688 6537388 0 0 10 9 20 42 8 2 90 0 0 0 0 0 498028 2688 6537388 0 0 0 0 2292 5939 10 3 87 0 0 0 0 0 498036 2688 6537388 0 0 0 0 1771 5419 10 3 86 0 0
CPU瓶颈
vmstat输出中有两个与CPU性能相关的重要区域。第一个是r列。它是输出中的第一列。它包含一个值,该值
对应于在vmstat运行的前一段时间内运行队列中的线程数。这些线程正在等待CPU可用以运行。关于最大数量
在这里是合适的有几种观点,但是大多数人都同意,系统上的cpu数量超过2到5倍就会出现瓶颈(这个估计需
要对多核cpu进行调整)。

与CPU相关数据的第二个位置是在输出的右侧列中。有三列:us(用户)时间、sy(系统)时间和id(空闲)时间。
这三种方法以百分比的形式分解了CPU时间的使用。加起来应该是100%理想情况下,CPU将把大部分时间花在
us和id类别上。sy类是指CPU花费在驱动程序/内核级工作上的时间。这段时间是从用户应用程序中抽出来的。
如果CPU将大部分时间花在这一类上,则可能表示由于CPU或内存瓶颈、内核级锁定问题或其他问题而导致的
过度上下文切换。一个繁忙的系统将显示一个恒定的空闲百分比接近于零。但是繁忙的系统并不一定意味着系
统过载。 vmstat 1 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 498004 2688 6537388 0 0 10 9 20 42 8 2 90 0 0 0 0 0 498028 2688 6537388 0 0 0 0 2292 5939 10 3 87 0 0 0 0 0 498036 2688 6537388 0 0 0 0 1771 5419 10 3 86 0 0
磁盘I/O性能
vmstat实用程序不能告诉我们哪些磁盘存在瓶颈,但是它可以告诉我们总体上是否存在IO问题。输出中的重要
列是b(被阻塞)列。它指的是在过去的间隔中被阻塞或等待IO完成的线程数量。大多数情况下b列应该是0。如
果该列中经常有非零数,则可以使用iostat进一步研究。
vmstat 1 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 498004 2688 6537388 0 0 10 9 20 42 8 2 90 0 0 0 0 0 498028 2688 6537388 0 0 0 0 2292 5939 10 3 87 0 0 0 0 0 498036 2688 6537388 0 0 0 0 1771 5419 10 3 86 0 0
总结
r: 如果等待运行的进程数越多,意味着CPU非常繁忙。另外,如果该参数长期大于和等于逻辑cpu个数,则CPU
资源可能存在较大的瓶颈。
b: 处在非中断睡眠状态的进程数。意味着进程被阻塞。主要是指被资源阻塞的进程对列数(比如IO资源、页
面调度等),当这个值较大时,需要根据应用程序来进行分析,比如数据库产品,中间件应用等。
swpd: 已使用的虚拟内存大小。如果虚拟内存使用较多,可能系统的物理内存比较吃紧,需要采取合适的方式
来减少物理内存的使用。swapd不为0,并不意味物理内存吃紧,如果swapd没变化,si、so的值长期为0,这也
是没有问题的
si,so: 内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资
源都会被消耗。当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,这个是不正确的。不能
只看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性
能这时不会受到影响的。 当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特
殊磁盘段上,这样会 出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会
对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段
复制回RAM,导致服务器速度变慢。
us: 用户CPU时间(非内核进程占用时间)(单位为百分比)。 us的值比较高时,说明用户进程消耗的CPU时间
多。
sy: 系统使用的CPU时间(单位为百分比)。sy的值高时,说明系统内核消耗的CPU资源多
wa:这个指标意味着CPU在等待硬盘读写操作的时间,用百分比表示。wait越大则机器io性能就越差。说明IO
等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。

发表评论