AIX的vmstat命令详解(原创)

vmstat概述 

vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

Interval 参数指定每个报告之间的时间量(以秒计)。第一个报告包含系统启动后时间的统计信息。后续报告包含自从前一个报告起的时间间隔过程中所收集的统计信息。如果没有指定 Interval 参数,vmstat 命令生成单个报告然后退出。Count参数只能和 Interval 参数一起指定。如果指定了 Count 参数,其值决定生成的报告数目和相互间隔的秒数。如果 Interval参数被指定而没有 Count 参数,则连续生成报告。Count 参数不允许为 0。

内核为内核线程、调页和中断活动维护统计信息,vmstat 命令通过使用perfstat 内核扩展来对其进行访问。磁盘输入/输出统计信息由设备驱动程序维护。对于磁盘,利用活动时间和传送信息数量来确定平均传送速率。活动时间的百分数根据报告期间驱动器忙的时间量来计算。

vmstat命令输出详解 

输出样例

#vmstat 1 2


System    configuration:      lcpu=8      mem=15360MB


kthr           memory                   page              faults                     cpu
-----    ----------------------------      ----------------------  ------------       ----------------------------------------
 r  b      avm           fre           re  pi  po  fr       sr  cy  in         sy     cs     us   sy   id  wa
 1 0    1614482   971363     0   0   0   0       0   0  56      4997  2739  1   1   97  0
 0 0    1614484   971361     0   0   0   0       0   0  23      4435  2677  1   1   97  0

Kthr

kernel thread state(内核线程状态,表示每秒钟在采样间隔时间上对各种队列的内核线程数求得的平均值)
r: 取样期间可运行的内核线程的平均数,包括正在运行的线程和指准备运行但尚在等待运行的进程。

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.  一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象. 
b:表示每秒VMM等待队列中的内核线程平均数(等待资源或I/O),这里参考值为2,大于2表示被阻塞列线程数目太多。 

Memory

Memory包括了虚拟内存和实际内存的信息
avm: 活动的虚拟页面(Active virtual pages,以4k为单位),该值较高并不意味着性能不好。记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在RAM 内存中,而另一些在调页空间中)。但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。如果 avm小于 RAM,那么当 RAM 中填满文件页时就会引起调页空间的页面调度。这种情况下,调整 minperm、maxperm 和 maxclient 的值可以减少调页空间的页面调度量。
fre: *表(free list)的大小。真实内存的大部分被用作文件系统数据的缓存。因此,*表(free list)的大小保持比较小并不稀奇。

Page

页面错误和分页活动的信息。此值为指定时间周期内每秒给定单位的平均值。
re  页面调度程序(Pager)输入输出列表(input/output)列表。
pi  表示每秒钟从Paging Space置换到内存的页数,调页空间是驻留在磁盘上的虚拟内存的一部分。当内存过量使用时,它用作溢出。调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。当进程访问一个窃取页时,产生了一个缺页故障,这一页必须从调页空间读入内存。这里pi的参考值为5,大于5说明内存不足。
po  表示每秒钟从内存置换到Paging Space的页数,无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,那它会被写入调页空间。如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。如果包含在出故障页面中的后续地址引用导致缺页故障,那么这些页面将会由系统个别调进。当一个进程正常终止,任何分配给该进程的调页空间将被释放。如果这两列持续大于5,则系统的性能瓶颈很可能是内存不足,而导致交换频繁。
fr  表示每秒钟页面置换算法释放的页数。当 VMM 页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。
sr  表示每秒钟页面置换算法检查的页数,页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。
cy  页面置换算法所使用的时钟周期。即表示每秒页面替换代码扫描了 PFT 多少次。因为插入空闲列表可以不需要完全扫描 PFT,并且因为所有的 vmstat 字段报告为整数,这一字段通常为 0。 
Faults 故障列:样例时间周期中,每秒陷阱(Trap )和中断率的平均值。
in  设备中断次数 ,iostat命令输出更有参考意义。
sy  系统调用次数 ,通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs  内核线程上下文交换 Kernel thread context switches。即时间片用完后,再轮到时的上下文计算,如果太高,则要仔细观察
CPU

CPU 使用时间百分比细目分类
us  用户进程CPU占用,一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy  系统进程CPU占用 ,这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
id  系统空闲 CPU idle time
wa  表示IO等待时间,即系统等待未完成的 disk/NFS I/O 请求期间的CPU 空闲时间,
如果us与sy之和持续超过90%时,CPU出现了瓶颈。
如果wa长期很高>50,则表示IO太忙,具体看是应用IO多,还是交换分页多,如果是后者,则显示内存不足;如果是前者,则应关注应用的IO性能状况,优化应用与磁盘设备
pc  消耗物理处理器的数目。只在使用共享处理器运行的分区显示(只在微分区环境中显示)
ec  消耗授权容量的百分比。只在使用共享处理器运行的分区显示(只在微分区环境中显示)

Active Memory Sharing 增加的新字段

mmode
如果分区以共享内存模式运行,就显示 shared。到编写本文时,对于专用内存分区,不显示这个字段。
mpsz
显示共享内存池的大小。
hpi
显示分区的系统管理程序页面换入数量。如果系统管理程序已经把引用的页面换出到磁盘,所以它们在真实内存中不存在,就会发生系统管理程序页面换入。如果在执行 vmstat 命令时没有指定时间间隔,那么显示的值是从引导时开始计算的。
hpit
显示分区的系统管理程序分页花费的时间(以毫秒为单位)。如果在执行 vmstat 命令时没有指定时间间隔,那么显示的值是从引导时开始计算的。
pmem
显示支持逻辑内存的物理内存量(以 GB 为单位)。
loan
显示借给系统管理程序的逻辑内存量(以 GB 为单位)。可以通过 vmo 可调项 ams_loan_policy 调整借出的内存量。

vmstat参数列表 

-f 报告从系统启动后的派生数目。
-h 显示系统管理程序分页信息
-i 显示从系统启动后每个设备造成的中断数目。
-I 用新的输出栏显示 I/O 定向视图,p 在标题 kthr 下;栏 fi 和 fo 在标题页面下,而不是栏下;re 和 cy 在页标题中。
-s 将总数结构中的内容写入到标准输出,该结构包含从系统初始化后调页事件的绝对计数。如下描述了这些事件:地址翻译错误每次发生地址转换页面故障时增加。解决页面故障可能需要 I/O,也可能不需要。存储保护页面故障(失去锁定)不包含在此计数之内。入页随虚拟内存管理器读入的每页增加。计数随调页空间和文件空间的入页增加。它和出页统计信息一起表示实际 I/O(由虚拟内存管理器启动)的总量。出页随虚拟内存管理器写出的每页增加。计数随调页空间和文件空间的出页而增加。它和入页统计信息一起表示实际 I/O(由虚拟内存管理器启动)的总量。调页空间入页只随 VMM 启动的来自调页空间的入页而增加。调页空间出页只随 VMM 启动的来自调页空间的出页而增加。总回收当不启用一个新的 I/O 请求也可以满足地址翻译错误时增加。如果页面以前已经被 VMM 请求过的,但是 I/O 还没有完成;或者页面被预读算法提前提取,但是被故障段隐藏了;或者如果页面已经被放入空闲列表中,但还没有重新使用,则会发生此情况。零填充页面故障如果页面故障针对的是工作存储器,且可以通过指定一个帧并以零填充帧来满足它的话,则该值增加。可执行填充页面故障随着每个指令页面故障而增加。用时钟检查页面VMM 利用时钟算法实施伪最近最少使用(1ru)的页面替换模式。时钟检查过的页面是 aged 。为每个时钟检查过的页面增加此计数值。时钟指针的转动随着每次 VMM 时钟旋转而增加(即在每一次完整的内存扫描后)。用时钟释放的页面随着时钟算法从实内存中选择释放的每一个页面而增加。
  回溯随着解决前一个页面故障时出现的每一个页面故障而增加。(必须首先解决新的页面故障,然后可以回溯到最初的页面故障。)锁定丢失VMM 通过除去对页面的寻址能力来强制并发性锁定。锁定丢失可能产生一个页面故障,每当此类情况发生时,此计数增加。空闲帧等待在收集可用帧时,每次 VMM 等待一个进程时增加。扩展 XPT 等待每次正在进行提交而使得 VMM 等待一个进程时,随着正在被访问的段而增加。暂挂 I/O 等待每次 VMM 等待一个进程时随着要完成的入页 I/O 而增加。启动 I/O随着每个被 VMM 启动的读取或写入 I/O 请求而增加。此计数应该与入页和出页的总数相等。iodones在每次完成 VMM I/O 请求时增加。CPU 上下文交换随着每次 CPU 上下文交换而增加(新进程的分派)。设备中断每次硬件中断时增加。软件中断每次软件中断时增加。一次软件中断是一个类似于硬件中断(保存一些状态和服务器例程分支)的机器指令。系统调用用软件中断指令来完成,该指令转换控制到系统调用处理程序例程。陷阱不通过操作系统来维护。syscalls随着每次系统调用而增加。
-t 打印 vmstat 的每一输出行旁边的时间戳记。时间戳记按照 HH:MM:SS 格式显示。
注:
如果指定了 -f 、-s 或 -i 标志,将不打印时间戳记。
-v 将虚拟内存管理器维护的不同统计信息写入标准输出。内存页实内存的大小(以 4 KB 的页面数目计)。lruable 页要用于替换的 4 KB 页面的数目。此数目不包含被用于 VMM 内部页和用于内核文本的固定部分的页面。空闲页面空闲 4 KB 页面的数目。内存池指定内存池数目的调整参数(使用 vmo 管理)。固定页面固定的 4 KB 页面的数目。maxpin 百分比指定能被固定的实内存百分数的调整参数(使用 vmo 管理)。minperm 百分比实内存百分比的调整参数(使用 vmo 管理)。它指定一临界点,低于此临界点时阻止页面重新调度算法使用文件页面。maxperm 百分比实内存百分比的调整参数(使用 vmo 管理)。它指定一临界点,高于此临界点时页面取走算法只取走文件页面。numperm 百分比当前由文件高速缓存使用的内存百分数。文件页面当前由文件高速缓存使用的 4 KB 页面的数目。压缩百分比由压缩页面使用的内存百分数。压缩页面压缩内存页面的数目。numclient 百分数被客户机页面占用的内存百分数。maxclient 百分数指定能用于客户机页面的最大内存百分数的调整参数(使用 vmo 管理)。客户机页面客户机页面的数目。已调度的远程出页调度用于客户机文件系统的出页的数目。无 pbuf 而阻塞的暂挂磁盘 I/O没有可用 pbuf 而阻塞的暂挂磁盘 I/O 请求的数目。Pbuf 是用于保存逻辑卷管理器层上的 I/O 请求的固定的内存缓冲区。无 psbuf 而阻塞的调页空间 I/O没有可用 psbuf 而阻塞的调页空间 I/O 请求的数目。Psbuf 是用于保存虚拟内存管理器层上的 I/O 请求的固定内存缓冲区。
-v (由 -v 显示的统计信息,接上页) :无 fsbuf 而阻塞的文件系统 I/O没有可用 fsbuf 而阻塞的文件系统 I/O 请求的数目。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。无 fsbuf 而阻塞的客户机文件系统 I/O没有可用 fsbuf 而阻塞的客户机文件系统 I/O 请求的数目。NFS(网络文件系统)和 VxFS(Veritas)是客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。无 fsbuf 而阻塞的外部页面调度程序文件系统 I/O没有可用 fsbuf 而被阻塞的外部页面调度程序客户机文件系统 I/O 请求的数目。JFS2 是一个外部页面调度程序客户机文件系统。Fsbuf 是用于保存文件系统层上的 I/O 请求的固定内存缓冲区。

使用示例 

1、要显示 2 秒时间间隔的 5 个摘要,请输入:
 vmstat 2 5 
2、要显示引导后包括逻辑磁盘 scdisk13 和 scdisk14 的统计信息摘要:
vmstat scdisk13 scdisk14 
3、要显示派生统计信息:
 vmstat  -f 
4、要显示各事件的计数:

vmstat -s 
5、要显示 vmstat的每一输出栏旁边的时间戳记:
vmstat -t

6、 要以另一套输出栏显示新的 I/O 定向视图:
vmstat -I 
7、要显示所有可用的 VMM 统计信息,请输入:
vmstat -vs 


参考至:http://yinfeifei.iteye.com/blog/799687

           http://www.kuqin.com/aixcmds/aixcmds6/vmstat.htm#a341f927

           http://williamwu.blog.51cto.com/660480/130015

           http://www.ibm.com/developerworks/cn/aix/redbooks/powervm-activememory/5/index.html

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

作者:czmmiao 原文地址:http://czmmiao.iteye.com/blog/1156878
上一篇:【原创】开源Math.NET基础数学类库使用(06)直接求解线性方程组


下一篇:Linux awk命令详解