vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
vmstat的语法如下:
vmstat [-V] [-n] [delay [count]]
其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。
1、Linux下vmstat---------------------------------------------------
[root@cqggdb1 tmp]# 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 1 0 64167948 440044 63198232 0 0 28 43 5 5 0 0 99 1 0
procs
r 列表示运行和等待cpu时间片的进程数。
· 如果长期大于超过了CPU数目,有多数的进程等待CPU.,需要增加cpu。
· 大于系统中可用CPU个数的4倍的话,统面临着CPU短缺、或CPU速率过低
· r 和 b 不高于5,如果r 经常大于4,且id 经常少于40,则表示CPU 负荷很重。
(获取CPU个数:cat /proc/cpuinfo|grep processor|wc -l)
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。
wa列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
注意:
· vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
· 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺.
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs 列表示每秒产生的上下文切换次数,VMSTAT\u547d\u4ee4如当 cs比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory 以千字节为单位
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache:作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si由内存进入内存交换区数量。
so由内存交换区进入内存数量。
注意:当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内存系统经常会对内存段进行页导出,但页导入操作就表明了服务器需要更多的内存了,页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。这里还得配合CPU使用率来看。
如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放.
如果是ORACLE出现这种情况:
1.最简单的,加大RAM。2、改小SGA,使得对RAM需求减少。3、减少RAM的需求(如:减少PGA)
IO
bi从块设备读入数据的总量(读磁盘)(每秒kb)。
bo块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。
2、HPUX vmstat---------------------------------------------------
# vmstat
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
1 1 0 1690522 189751 0 0 1 0 0 0 1 437 3169 166 1 1 98
命令格式:
vmstat [-dnS][ interval [ count]]
vmstat -f -s -z
1)、vmstat可识别下列选项:
-d以每秒传输的形式,作为单独部分报告磁盘传输信息。
-n 提供在80列的显示设备上更容易查看的输出格式。此格式将缺省输出分成两组:虚拟内存信息和CPU数据。将每组都作为输出的单独行来显示。在多处理器系统中,此显示格式还提供活动处理器的每个CPU上的CPU 利用率。
-S报告换入和换出中的进程的数量(si和so ),而不报告页回收和地址转换错误(re和at )。
interval显示连续行,这些连续行是最后interval秒的摘要。所报告的第一行表示自重新引导起的时间内的内容,每一后续行仅表示最后间隔时间内的内容。如果 interval为零,则输出仅显示一次。如果指定-d选项,则重复列标题。如果忽略-d,则不重复列标题。vmstat 5命令每隔五秒输出一次系统的运行情况。选择这样的输出间隔非常好,因为这是系统中的一些统计信息进行采样的频率;其他统计信息每秒都在发生变化。
count 重复摘要统计信息count次数。如果忽略count ,或其值为零,则重复输出,直到接收到中断信号或退出信号。在终端,这些通常分别为ˆC和ˆ\ (请参阅stty (1))。
-f 报告关于派生的数量,以及自引导时起所涉及到的虚拟内存的页数量。
-s 从内核sum结构中输出自引导起或自上一次使用-z选项执行vmstat 起已发生的几种与分页
相关的事件的总数。
-z在内核sum结构中清除所有的数字存储器。此选项仅限于超级用户。
2)、每列的列标题和每列含义如下:
procs 关于各种状态下进程数量的信息。 这个和CPU个数有关系,如果大约CPU个数,就很严重了。
r 在运行队列中
b 对资源(I/O、分页等)进行分块
w 可运行的或短的休眠(<20秒)但被交换
memory 关于虚拟内存和实体内存使用的信息。如果虚拟页属于正在运行的进程,或在最近20秒内运行过的进程,则认为虚拟页处于活动状态。
avm 活动虚拟页
free 可用列表的大小
page 关于页错误和分页活动的信息。这些平均每五秒进行一次,并且以每秒单元数量给定。
re 页回收(不具有-S)
at 地址转换错误(不具有-S)
si 换入的进程(具有-S)
so 换出的进程(具有-S)
pi 分入的页
po 分出的页
fr 每秒释放的页
de 预见的短时内存不足
sr 每秒由时钟算法扫描的页
faults 最后5秒平均每秒的陷阱/ 中断率。
in 每秒设备中断的次数(非时钟)
sy 每秒系统调用次数
cs CPU 上下文切换频率(切换次数/秒) 如当 cs 比磁盘 I/O和网络信息包速率高得多,都应进行进一步调查。
cpu 活动处理器的CPU使用时间的故障百分比
us 正常的优先级进程的用户时间和低优先级的进程的用户时间
sy 系统时间 这里设置参考值为10000,超过10000,用户需要注意。
id CPU 空闲
us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。
3、AIX下vmstat------------------------------------------------
# vmstat 5 20
kthr memory page faults cpu
----- -------- --------------- --------- ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 1 244528 1227 0 3 3 56 151 0 404 1420 1415 4 2 88 6
2 6 244538 1241 0 39 148 2424 3511 0 904 4660 7571 49 12 2 38
5 3 244540 791 0 2 221 3937 6077 0 1183 6605 24619 44 34 1 21
1 7 245326 1009 0 11 331 1071 1934 0 884 3788 13000 23 25 0 52
分析如下:
kthr表示每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值
r 列表示可运行的内核线程平均数,包括正在运行的线程和正在等待 CPU的线程。如果这个数字大于 CPU的数目,至少有一个线程要等待 CPU,等待 CPU的线程越多,越有可能对性能产生影响。
b 列表示每秒 VMM等待队列中的内核线程平均数。这包括正在等待文件系统 I/O的线程,或由于内存装入控制而暂挂的线程。这里参考值为2,大于2表示被阻塞列线程数目太多。
[b] !阻塞线程数目太多
CPU
us 列显示了用户方式下所花费 CPU时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy列详述了 CPU在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。
id 列显示了没有未决本地磁盘 I/O时 CPU 空闲或等待的时间百分比。
wa 列详细显示了暂挂本地磁盘 I/O和 NFS 加载的磁盘的 CPU空闲百分比。这里参考值为25%,大于25%可能表示磁盘子系统可能没有被正确平衡,或者这也可能是磁盘密集工作负载的结果。
[us]+[sy] !IO不平衡
[wa] 正常
fault
in列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。
sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs列表示,如当 cs比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
[sy] 正常
memory
avm列表示在收集 vmstat样本时存在的活动虚拟内存页面数(4k为单位)。理想情况下, avm应该比总 RAM 数小。如果不是,
可能会出现一些虚拟内存页面调度量。有多少页面调度发生取决于两个值之间的差值。记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在 RAM内存中,而另一些在调页空间中)。但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。如果 avm小于 RAM,
那么当 RAM中填满文件页时就会引起调页空间的页面调度。
这种情况下,调整 minperm、maxperm和 maxclient 的值可以减少调页空间的页面调度量。
fre列显示出空闲内存页面的平均数量(4k为单位)。VMM在空闲列表上保存的最少页面数由 minfree参数决定。这里的参考值为maxfree的缺省值720,小于720说明存在内存系统颠簸。
[fre] 正常
[avm] avm的值约为:958MB
page
pi列详细描述了从调页空间调入的页数。调页空间是驻留在磁盘上的虚拟内存的一部分。当内存过量使用时,它用作溢出。
调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。当进程访问一个窃取页时,产生了一个缺页故障,
这一页必须从调页空间读入内存。这里设置pi的参考值为5,大于5说明内存不足。
po列显示了调出到调页空间的页面数(速率)。无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,
那它会被写入调页空间。如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。如果包含在出故障页面中的后续地址引用导致缺页故障,
那么这些页面将会由系统个别调进。当一个进程正常终止,任何分配给该进程的调页空间将被释放。
fr列表示在一定时间间隔内根据页面替换算法每秒所释放的页数。当 VMM页面替换例程扫描页面帧表(Page Frame Table,PFT)时,
它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。
sr 列表示在一定时间间隔内根据页面替换算法每秒所检查的页面数。
页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。
cy列表示每秒页面替换代码扫描了 PFT多少次。因为插入空闲列表可以不需要完全扫描 PFT,
并且因为所有的 vmstat字段报告为整数,这一字段通常为 0。
这里设置fr:sr的参考值为3,超过说明内存不足。
[pi] !存在内存不足
[fr:sr] 正常
4、Solairs系统下vmstat----------------------------
vmstat 5 5
procs memory page disk faults cpu
r b w swap free re mf pi po fr de sr s1 s1 -- -- in sy cs us sy id
0 0 0 704968 207640 0 1 2 0 0 0 0 0 0 0 0 302 6 31 0 0 100
0 0 0 705048 206728 1 2 0 0 0 0 0 0 0 0 0 302 4 34 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 3 35 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 301 3 34 0 0 100
0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 6 35 0 0 100
procs
r 列表示在运行队列中等待的进程数。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
w 列表示可以进入运行队列但被交换出来的进程
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。
sy 列详述了 CPU在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。
id 列显示了没有未决本地磁盘 I/O时 CPU 空闲或等待的时间百分比。
faults 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。
sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。
cs 列表示,如当 cs比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swap 当前可用内存交换区容量(k表示)。
free 当前的空闲页面列表中内存数量(k表示)
page
re 列表示回收的页面数。
mf 列表示小级别错误计数。
pi 列表示进入页面数(k表示)。
po 列表示出页面数(k表示)。
fr 列表示空余的页面数(k表示)。
de 列表示提前读入的页面中的未命中数。
sr 列表示通过时钟算法扫描的页面计数