AIX小型机系统监视工具参数详解和调整内存的使用.docx
《AIX小型机系统监视工具参数详解和调整内存的使用.docx》由会员分享,可在线阅读,更多相关《AIX小型机系统监视工具参数详解和调整内存的使用.docx(27页珍藏版)》请在冰豆网上搜索。
![AIX小型机系统监视工具参数详解和调整内存的使用.docx](https://file1.bdocx.com/fileroot1/2023-8/4/ea38b88a-1bb0-4c60-a554-1a7b70cdd533/ea38b88a-1bb0-4c60-a554-1a7b70cdd5331.gif)
AIX小型机系统监视工具参数详解和调整内存的使用
1、监视和调整内存的使用
一个系统的内存通常会几乎被占满。
即使当前运行的程序没有消耗掉所有的内存,操作系统也会将较早运行的程序和它们所使用的文件的文本页面驻留在内存。
这样的驻留并没有任何的开销,因为内存无论如何都不会去使用这一段内存。
在许多情况下,程序或者文件将会被再次用到,这样可以减少磁盘的输入输出。
检测有多少内存正被使用
一些测试性能的工具提供了内存使用的报告。
我们最感兴趣的报告是由vmstat,ps,和svmon命令提供的。
vmstat命令(内存)
vmstat命令概括了系统中所有进程所使用的活动的虚拟内存,同时还有空闲列表上实际内存页的数量。
活动的虚拟内存被定义为虚拟内存中实际可以得到的工作的段页的数量(参考页面后分配中的定义)。
这个数字可能大于机器中实际页面的帧,因为一些动态虚拟内存也可能写到字分页空间以外去。
在检测内存是否短缺或者是否有需要调优内存,一系列时间间隔里输入vmstat命令,在结果报告中检验pi和po栏。
这两栏表明了每秒页面调入的页数和每秒调出的页数。
如果该值经常为非零值,说明可能存在内存瓶颈。
偶尔出现的非零值不用在意因为页面调度是虚拟内存的主要原理。
#vmstat210
kthrmemorypagefaultscpu
---------------------------------------------------------------
rbavmfrerepipofrsrcyinsycsussyidwa
131137261240146151600052155338162313757
03113643346021420869005852201866169273
0311365913502210832305161563797257266
0211366112203212037505271622871137279
03113662128010313443206441434948227467
151138582380351146422059951039034016044
03113969127051015352905652006823198370
03113983125033515342405592165921258463
031136821210209154470060815691007158077
041137011240329228635067417301086189073
注意到输出列队里的高输入输出等待,也注意到阻塞队列里线程的数量。
最有可能输入输出等待是因为从字分页空间的出入调度。
为了了解系统的VMM是否有问题,可以检查memory和page这两栏。
∙∙ 内存
提供了实际和虚拟内存的信息。
ooavm
avm(活动的虚拟内存)一栏显示目前vmstat样本收集的动态虚拟内存的页数。
从AIX4.3.2开始,一项页面空间延时策略在默认值下开始生效。
在该项策略下,avm的值可能比字分页间空使用的页数还要高。
avm统计信息并不包含文件页面。
注:
从AIX4.3.2开始的版本中,报告该值时有微小变化。
参看查看页面调度空间和内存会有该项解释。
在AIX4.3.2之前的版本中,avm字段里的数字除以256可以得到分配给系统级的字分页空间的大致数目,以兆字节(MB)计算.这同样适用于AIX4.3.2和以后的版本,即使改变了页面空间默认值。
在AIX4.3.2之前,同样的信息会在PercentUsed一栏中反映出来,用lsps-s命令输出或者svmon-G命令,在pgspaceinuse字段下也可以看出。
oofre
fre栏显示出空闲内存页面的平均数量。
一个页面是实际内存中的4KB的区域。
系统为内存页面建立了一个缓冲区,称为空闲列表。
当VMM需要空间时可以立即访问此空闲列表。
VMM在空闲列表中保存最少页面的数量决定于minfree参数,该参数执行vmtune命令可以得到。
(相关细节可以参看用vmtune命令调优VMM页面的替换)。
当一个应用程序终止时,它所有的工作页面会立即还给空闲列表。
然而,它的持久页面(文件)仍保存在RAM中,不会被归还到空闲列表中,直到被VMM为其他程序而窃取。
如果文件被删除的话,其相应的持久页面将被释放。
就因为这个原因,fre的值可能不一定表明了进程立即可用的所有实际内存。
如果需要页帧,那已终止应用程序的持久页面将会比所有其他程序的容易得到。
如果fre的值远大于maxfree的值,那不太可能系统颠簸。
系统颠簸意味着系统一直在进行出入页面调度。
然而,如果系统正在试验抖动,您可以肯定fre的值会很小。
∙∙ 页面
页面错误和页面调度活动地信息。
他们是一段时间的平均值并以每秒作为单位给出。
oore
注:
在AIXV4中不再支持回收,因为它的价值(提供的有限的系统性能的信息)无法弥补跟踪回收算法对系统的负面影响。
oopi
pi一栏显示了字分页空间调入数量(速率)的详细信息。
字分页空间是驻留在磁盘上的虚拟内存的一部分。
当内存过量使用时,它用作超出部分的内存。
调度空间由用于存储从实际内存中窃取到的工作页面的逻辑卷组成。
当进程访问一个窃取页时,产生了一个页面错误,这一页必须由字分页空间读入内存。
因为硬件配置,软件和应用程序的不同,没有绝对的数字可以用以参考。
但是每秒每页面调度空间插入五页的速度应该是上限。
这个准则不必严格遵守,只作参考。
这个字段作为一个字分页空间活动的关键指示符。
如果发生页面调进,就一定有一个较早的页面调出。
在约束内存环境下也有可能每一次页面调进会强迫另一个页面的被窃取进而页面调出。
但是,当它们接近于每秒10pi时,系统将近一分钟不调进任何页面也可以工作的很好。
oopo
po一栏显示了页面调入数量(速率)的详细情况。
无论什么时候一个页的存储被窃取,如果还不驻留在内存或已被修改,那它就会被写入字分页空间。
如果不再次被访问,它会留在页面调度设备中直到进程终止或放弃空间。
如果地址包含了错误的调出页面信息,那到该地址的访问导致了页面错误,页面将会被系统个别调进。
当一个进程正常终止,任何分配给该进程的地址空间将被释放。
如果系统读入大量的持久页面(文件),您会发觉po栏里增加了却没有在pi栏里有相应的增加。
这并不一定会造成系统的颠簸,但可以保证对于应用程序数据存取模式的调查。
oofr
在一定时间间隔内根据页面替换算法每秒所释放的页面的数量。
当VMM页面替换例程扫描页面帧表(PFT),它使用某些标准选取哪些页面将被窃取而插入到可用内存帧的空闲列表中去。
该标准包含了两种页面种类,工作(计算的)和文档(持久的)页面。
就因为页面被释放,并不意味着发生了任何输入输出。
例如,如果一个持久存储页面没有被修改过,它就不会被写回磁盘。
如果输入输出不是必须的,最小的系统资源会要求释放页面。
oosr
在一定时间间隔内根据页面替换算法每秒所释检查的页面的数量。
VMM页面替换代码扫描PFT并窃取页面直到空闲列表里的帧数量大于maxfree的值。
页面替换代码在窃取足够的页面以满足空闲列表之前空仓不得不扫描PFT的入口。
在稳定,非碎片内存中,扫描速率和释放速率可能接近相等。
在多进程系统中要使用不同的页面,所以页面更加易丢失和分散。
在这种情况下,扫描速率可能远大于释放速率。
当fr和sr的比例(fr:
sr)很高时,内存将会过量使用。
fr:
sr为1:
4的比例意味着每释放一页,有四页被检查了。
很难单独根据这个比例来决定对于内存约束,是工作负载或者独立的应用程序构成了这么高的比例。
oocy
时钟算法中每秒周期的数量。
VMM使用一种叫时钟算法的技术来选择被替换的页面。
这种技术利用了每一个页面的访问位来识别那些页最近曾被使用(访问)。
当页面窃取例程被调用,它遍历整个PFT,检查每一页的访问位。
cy一栏显示了每秒页面替换代码扫描了PFT多少次。
因为插入空闲列表可以不需要完全扫描PFT,并且因为所有的vmstat字段显示为整数,这一字段通常为0。
如果不是,就表示一次完整的PFT扫描,并且窃取程序要再一次扫描PFT,因为fre的值仍低于maxfree的值。
检测一个系统的大致RAM数量的一种方法是察看avm字段的最大值,该字段由vmstat命令给出。
将得到的数字乘以4K获取系统的RAM的字节数。
理想情况下,avm应该比总的RAM的数量少。
如果不是,可能会发生一些虚拟内存的页面调度。
有多少页面调度取决于两个值之间的差值。
记住,虚拟内存的概念是给我们大于实际内存的容量(一些在RAM中,而另一些存于字分页空间)。
但是如果虚拟内存远大于实际内存,可能造成过度的页面调度,导致延时。
如果avm小于RAM,那么当RAM中满是文件页的时候就会引起字分页空间的调度。
这种情况下,调整minperm/maxperm的值,能够减少字分页空间调用的量(参看用vmtune命令调优VMM页面替换)。
vmstat-I命令
在AIX4.3.3以后的操作系统的版本中,vmstat-I(大写字母i)命令显示附加信息,例如每秒钟调入的文件页面,每秒钟调出的文件页面(即任何的VMM调入调出并不是字页空间的调入或调出)。
re和cy栏并没有反映在这个标志中。
vmstat-s命令
总结(-s)选项给出一个总结报告到标准输出,该报告从系统初始化开始,是完整的计数表示,而不是在某段时间区域内的。
推荐使用这些统计信息的方法是在有工作负载之前运行该命令,保存输出,在有工作负载时再次运行,另保存输出。
下一步是决定两组输出间的差异。
awk脚本调用自动完成这些事情的vmstatit函数,该函数由决定问题是否与磁盘或内存有关提供。
#vmstat-s
3231543totaladdresstrans.faults
63623pageins
383540pageouts
149pagingspacepageins
832pagingspacepageouts
0totalreclaims
807729zerofilledpagesfaults
4450executablefilledpagesfaults
429258pagesexaminedbyclock
8revolutionsoftheclockhand
175846pagesfreedbytheclock
18975backtracks
0lockmisses
40freeframewaits
0extendXPTwaits
16984pendingI/Owaits
186443startI/Os
186443iodones
141695229cpucontextswitches
317690215deviceinterrupts
0softwareinterrupts
0traps
55102397syscalls
总结里的页面调进和页面调出的数量表现了虚拟内存从页面空间和文件空间调入调出页面的活动。
字分页空间的出入调度是页面调度的一个典型。
如果您正在测试输入输出等待时间,而没有内存约束,那问题可能是由于糟糕的输入输出驱动分布。
为了决定问题是否出在页面或文件的出入调度,要取得vmstat-s命令的多个样本,并检查字分页空间的出入调度是否是所有调度的主部分。
如果系统中调度过多,使用vmtune命令可能有所帮助(参看用vmtune命令调优VMM页面替换)。
在分离卷上创建分离的字分页空间调度可能会有好处,但增加的内存确实肯定有好处。
ps命令
ps命令也可以监视个别进程对内存的使用。
psvPID命令为个别进程提供了最综合性的内存相关的统计信息,例如:
∙∙ 页面错误
∙∙ 可使用工作段的容量
∙∙ 内存中工作段和编码段的容量
∙∙ 文本段的容量
∙∙ 驻留集的容量
∙∙ 进程使用实际内存的百分比
举个例子:
#psv
PIDTTYSTATTIMEPGINSIZERSSLIMTSIZTRS%CPU%MEMCOMMAND
36626pts/3A0:
0003164083276851600.00.0psv
结果中最重要一栏ps显示了如下的描述:
PGIN
页面错误引起的插入页的数目。
既然所有输入输出归于页面错误,那这就是基本的输入输出测量。
容量
进程数据区域的虚拟容量(在字分页空间),用千字节表示(在其他标志中用SZ来表示)。
这个数目等于进程可用的工作段页的数目的4倍。
如果一些工作段页最近被调出,这个数值将大于实际内存的数目。
SIZE包含了私有段的页面和进程的共享库数据段。
RSS
进程实际内存(驻留集合)的容量,用千字节表示。
这个数值等于进程内存中的工作段页和代码段页数和的4倍。
记住该代码段页是为所有当前程序运行的实例所共享的。
如果26ksh进程正在运行,只有ksh的可执行程序的页面的一份副本可以驻留内存,但是ps命令会将代码段的大小作为每个ksh程序的实例的RSS的一部分报告。
TSIZ
文本(共享程序)映像的容量。
这是可执行文件的文本区域的容量。
可执行程序文本区的页面是只能在它们被用到时带入内存的,就是说,转移或载入到内存。
这个数字只表明了可以载入的文本量的上界。
TSIZ的值并不反映实际内存的使用情况。
这个TSIZ值也可以通过对可执行程序执行dump-ov命令查看到(例如:
dump-ov/usr/bin/ls)。
TRS
文本驻留集合(实际内存)的容量。
这个数目等于进程可用的代码段页的数目的4倍。
当程序有多个运行实例时,这个数字夸大了内存的使用情况。
TRS的值可能比TSIZ的值要高是因为其他页可能包含了代码段,例如XCOFF头文件和载入区域。
%MEM
由内存中工作段和代码段的和的4倍计算得到(就是说,RSS的值),再除以机器实际内存的容量(单位KB),再乘以100,凑整到最接近的百分点。
这个值大致表明了进程使用的实际内存。
但不巧的是,就像RSS,它夸大了一个进程与其他进程共享程序文本的开销。
而且,凑整到最接近的百分点,使得系统中所有RSS值小于0.005乘以数据内存大小的进程的%MEM值为0.0。
注:
ps命令并不表明共享内存段或者存储映像消耗的内存。
因为许多应用程序使用共享内存和存储映像,svmon命令是一个更好的察看这些段的使用情况的工具。
svmon命令
svmon命令提供了一个更加深入的内存使用情况的分析。
比起vmstat和ps等命令来说,它带有更多信息量,并且也更具有指导意义。
svmon命令俘获一个当前内存状态的快照。
然而,这并不是一个真正的快照因为它运行在用户级,即中断允许状态。
要决定是否svmon被安装,是否可以使用,运行一下命令:
#lslpp-lIfileset_name
当fileset_name是perfagent.tools在AIX4.3或者bos.perf.tools在AIX5或之后的版本上。
svmon命令只能被根用户使用。
如果使用时间间隔(-i选项),统计信息将会一直显示直到命令终止或者达到了时间间隔的数值,终止方案被赋予了特殊权限。
显示的信息可以用四种不同的报告来分析:
整体(-G)
显示整个系统中实际内存和字分页空间的使用的统计信息。
进程(-P)
显示活动进程的存储使用策略。
段(-S)
显示在某一特定的程序段数或者降序显示最高十位使用内存的进程。
段的详细信息(-D)
显示某一特定段的详细信息。
在AIX4.3.3中可用的其他报告如下:
用户(-U)
显示某个特定的登录名下的内存使用统计信息。
如果不给予要显示的登录名,则所有登录名的内存使用统计信息都将被显示。
命令(-C)
显示某个指定的命令名所用的进程的内存使用统计信息。
工作负载管理类(-W)
显示指定的工作负载管理类所的内存使用统计信息。
如果不给予要显示的类,则所有类的存使用统计信息都将被显示。
为了支持64位的应用程序,svmon命令的输出格式在AIX4.3.3和其以后的版本中被修改。
在4.3.3及其以后的版本中,操作系统有附加的报告可用,如下:
帧(-F)
显示帧的信息。
不指定具体帧的号码时,会报告使用的内存的百分比。
而当指定了具体帧号是,会报告该帧的信息。
层(-T)
显示层的信息,例如层号,使用-a标志时的超类名和实际内存中属于层的段的总页数。
有多少内存正在被使用
打印全局的统计信息,要用-G标志。
在这个例子里,我们在两秒内重复了该命令五次。
#svmon-G-i25
memoryinusepinpgspace
sizeinusefreepinworkpersclntworkpersclntsizeinuse
1638416250134********5293926362006004096012674
1638416254130********9293926362006004096012676
1638416254130********9293926362006004096012676
1638416254130********9293926362006004096012676
1638416254130********9293926362006004096012676
结果中最重要的一栏svmon显示如下描述:
memory
统计信息描述的实际内存的使用,是4K页。
size
整个内存的容量是4K页。
inuse
RAM中进程使用的页数加上程序已终止但仍驻留在RAM中的持久页面的页数。
这个值等于总内存减去空闲列表的值。
free
空闲列表中页面的数量。
pin
钉在RAM的页面的数量。
(一个针定页面就是一直驻留RAM,不会被调出的页面)。
inuse
正在使用的实际内存的子集的详细信息,以4K帧显示。
work
RAM中工作页面的数量。
pers
RAM中持久页面的数量。
clnt
RAM中客户机页面的数量(客户机页面就是一个远程文件页面)。
pin
包含针定页面的实际内存的子集的详细信息,以4K帧显示。
work
针定在RAM中的工作页面的数量。
pers
针定在RAM中的持久页面地数量。
clnt
针定在RAM中的客户页面的数量。
pgspace
字分页空间使用统计信息,以4K帧显示。
该数据只有当-r标志不被使用时才会报告。
从AIX4.3.2开始报告的数值是字分页空间实际使用的页面的数量(这说明这些页是被调出到字分页空间的)。
它与vmstat命令的不同在于vmstat的avm一栏显示的是虚拟内存可以访问的地址而不一定是调出的地址。
size
总字分页空间的容量,以4K页计。
inuse
分配页的总数。
在我们的例子中,总的存储容量有16384页大。
将这个数乘以4096就是总实际内存的容量。
其中16250页正被使用,而空闲列表中有134页,针定在RAM中的有2006页。
在所有被使用的页中,RAM中有10675页工作页面,2939页持久页面和2636客户页面。
这三个部分的总和等于memory一栏中inuse一栏的数值。
pin部分除以针定页面容量可以得到工作、持久和客户三类针定页面的大小。
它们的和等于memory部分中的pin一栏的值。
字分页空间总共有40960页(160MB),有12676页正在使用。
memory中的inuse一栏通常要比pgspace中的inuse一栏要大,当一个进程完成后,因为分配字分页空间时文件页面占用的存储器不会释放。
在AIX4.3.3及其后来版本,系统对于同样命令的输出就如下所示:
#svmon-G-i25
sizeinusefreepinvirtual
memory65527640871440590981136
pgspace13107255824
workpersclnt
pin591800
inuse47554138382695
sizeinusefreepinvirtual
memory65527640911436590981137
pgspace13107255824
workpersclnt
pin591800
inuse47558138382695
sizeinusefreepinvirtual
memory65527640911436590981137
pgspace13107255824
workpersclnt
pin591800
inuse47558138382695
sizeinusefreepinvirtual
memory65527640901437590981137
pgspace13107255824
workpersclnt
pin591800
inuse47558138372695
sizeinusefreepinvirtual
memory65527641681359591281206
pgspace13107255824
workpersclnt
pin592100
inuse47636138372695
增加的输出字段是virtual字段,它说明了分配给系统虚拟空间的页数。
谁在使用内存?
以下命令显示了使用内存最多的十个进程的统计信息。
如果您不指定一个数值,它将显示所有当前在系统中运行进程。
#svmon-Pau10
PidCommand