内存 性能监视.docx
- 文档编号:9031625
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:25.89KB
内存 性能监视.docx
《内存 性能监视.docx》由会员分享,可在线阅读,更多相关《内存 性能监视.docx(14页珍藏版)》请在冰豆网上搜索。
内存性能监视
有几种性能工具可提供内存使用情况报告。
最让人感兴趣的报告来自vmstat、ps和svmon命令。
使用vmstat命令确定内存使用情况
vmstat命令总结了系统中所有进程使用的总活动虚拟内存,以及空闲列表上实内存页帧的数量。
活动的虚拟内存定义为虚拟内存中实际可以得到的工作段页面的数量。
有关更详细的定义,请参阅『后页面空间分配』。
这个数字可能大于机器中的实际页帧数,因为一些活动的虚拟内存页可能已写出到调页空间中。
当确定内存是否短缺或者是否需要进行某种内存调谐时,在一组时间间隔里输入vmstat命令,检查结果报告中的pi和po列。
这两列表明了每秒调页空间页面调入的数量和每秒调页空间页面调出的数量。
如果这些值经常为非零值,说明可能存在内存瓶颈。
偶尔出现的非零值不用在意,因为页面调度是虚拟内存的主要原理。
#vmstat210kthrmemorypagefaultscpu---------------------------------------------------------------rbavmfrerepipofrsrcyinsycsussyidwa1311372612401461516000521553381623137570311364334602142086900585220186616927303113659135022108323051615637972572660211366112203212037505271622871137279031136621280103134432064414349482274671511385823803511464220599510390340160440311396912705101535290565200682319837003113983125033515342405592165921258463031136821210209154470060815691007158077041137011240329228635067417301086189073
在上述示例输出中,请注意输出中的较高的I/O等待率以及阻塞队列中的线程数。
其它I/O活动可能会造成I/O等待,但是在这种特殊情况下,I/O等待最大可能是由于与页面空间之间的页面调进调出造成的。
要察看系统的VMM是否有性能问题,请检查memory和page下的列:
内存
提供了实际和虚拟内存的信息。
avm
活动虚拟内存avm列显示在收集vmstat样本时存在的活动虚拟内存页面数。
缺省策略为延迟页面空间策略。
在该策略下,avm的值可能比使用的调页空间页面数要高。
avm统计信息并不包含文件页面。
fre
fre列显示出空闲内存页面的平均数量。
一个页面是实内存中的4KB的区域。
系统维护内存页面的缓冲区,称为空闲列表。
当VMM需要空间时可以很方便地访问此空闲列表。
VMM在空闲列表上保存的最少页面数由vmtune命令的minfree参数决定。
有关更多详细信息,请参阅『用vmtune命令进行VMM页面替换调谐』。
当一个应用程序终止时,它所有的工作页面会立即返回给空闲列表。
然而,它的持久页面(或文件)仍然在RAM中,不会添加回空闲列表中,直到由VMM窃取用于其它程序为止。
如果删除相应的文件,也会释放其持久页面。
由于这个原因,fre的值可能不表示进程可以方便使用所有实内存。
如果需要页帧,那与已终止应用程序相关的持久页面将会最先移交给另一个程序。
如果fre的值远大于maxfree的值,那不太可能出现系统颠簸。
系统颠簸意味着系统一直在进行页面调进调出。
然而,如果系统正在经历抖动,可以肯定fre值很小。
页面
关于缺页故障和页面调度活动的信息。
它们是一段时间间隔的平均值并以秒为单位给出。
re
注:
这一栏当前不受支持。
pi
pi列详细描述了从调页空间调入的页数。
调页空间是驻留在磁盘上的虚拟内存的一部分。
当内存过量使用时,它用作溢出。
调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。
当进程访问一个窃取页时,产生了一个缺页故障,这一页必须从调页空间读入内存。
因为硬件配置、软件和应用程序的不同,没有绝对的数字可以用以参考。
这个字段作为调分页空间活动的关键指示符。
如果发生页面调进,该页面就一定有一个较早的页面调出。
在内存受限的环境下也有可能每一次页面调进会迫使另一个页面被窃取而页面调出。
po
po一栏显示了调出到调页空间的页面数(速率)。
无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,那它会被写入调页空间。
如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。
如果包含在出故障页面中的后续地址引用导致缺页故障,那么这些页面将会由系统个别调进。
当一个进程正常终止,任何分配给该进程的调页空间将被释放。
如果系统读入大量的持久页面,您会发觉po栏里增加了而在pi栏里没有相应增加。
这并不一定会造成系统颠簸,但可以保证对于应用程序数据存取模式的调查。
fr
在一定时间间隔内根据页面替换算法每秒所释放的页数。
当VMM页面替换例程扫描页面帧表(PageFrameTable,PFT)时,它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。
该条件包含了两种页面,工作(计算的)和文件(持久的)页面。
就因为页面已经释放,并不意味着发生了任何I/O。
例如,如果某个持久存储(文件)页面尚未修改,它就不会被写回磁盘。
如果I/O不是必需的,则要求最小的系统资源来释放页面。
sr
在一定时间间隔内根据页面替换算法每秒所检查的页面数。
页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。
sr值比fr值高得越多,页面替换算法查找要窃取的合格页面就越困难。
cy
时钟算法中每秒的周期数。
VMM使用一种叫时钟算法的技术来选择要替换的页面。
这种技术利用了每一个页面的访问位来指示哪些页最近曾被使用(访问)过。
调用页面窃取程序例程时,它遍历整个PFT,检查每一页的访问位。
cy一栏显示了每秒页面替换代码扫描了PFT多少次。
因为插入空闲列表可以不需要完全扫描PFT,并且因为所有的vmstat字段报告为整数,这一字段通常为0。
确定一个系统的适当RAM数量的一种方法是察看avm字段的最大值,该字段由vmstat命令报告。
将该数字乘以4K得到字节数,然后将其与系统的RAM字节数比较。
理想情况下,avm应该比总RAM数小。
如果不是,可能会出现一些虚拟内存页面调度量。
有多少页面调度发生取决于两个值之间的差值。
记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在RAM内存中,而另一些在调页空间中)。
但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。
如果avm小于RAM,那么当RAM中填满文件页时就会引起调页空间的页面调度。
这种情况下,调整minperm、maxperm和maxclient的值可以减少调页空间的页面调度量。
有关更多信息,请参阅『用vmo命令进行VMM页面替换调谐』。
vmstat-I命令
vmstat-I命令显示其它信息,例如每秒调进的文件和每秒调出的文件(即不是调页空间调进或调页空间调出的所有VMM调进调出。
使用这个标志不会报告re和cy栏。
vmstat-s命令
摘要选项-s向标准输出发送摘要报告,该报告从系统初始化开始,以绝对计数表示,而不是基于某个时间间隔。
推荐使用这些统计信息的方法是在有工作负载之前运行该命令,保存输出,在有工作负载后再次运行此命令,并保存输出。
下一步是确定两组输出间的差异。
自动实现该操作的awk脚本名为vmstatit,在『确定问题是否与磁盘或内存有关』中提供。
#vmstat-s3231543totaladdresstrans.faults63623pageins383540pageouts149pagingspacepageins832pagingspacepageouts0totalreclaims807729zerofilledpagesfaults4450executablefilledpagesfaults429258pagesexaminedbyclock8revolutionsoftheclockhand175846pagesfreedbytheclock18975backtracks0lockmisses40freeframewaits0extendXPTwaits16984pendingI/Owaits186443startI/Os186443iodones141695229cpucontextswitches317690215deviceinterrupts0softwareinterrupts0traps55102397syscalls
总结里的页面调进和页面调出的数量代表虚拟内存从页面空间和文件空间调进或调出页面的活动。
调页空间的页面调进调出代表整个页面空间。
用ps命令确定内存使用情况
ps命令也可以用来监视个别进程对内存的使用。
psvPID命令为个别进程提供了最全面的内存相关统计信息的报告,例如:
缺页故障
工作段已经达到的大小
内存中工作段和代码段的大小
文本段的大小
驻留集的大小
进程使用的实内存的百分比
下面是一个例子:
#psvPIDTTYSTATTIMEPGINSIZERSSLIMTSIZTRS%CPU%MEMCOMMAND36626pts/3A0:
0003164083276851600.00.0psv
结果ps报告中最重要的列描述如下:
PGIN
缺页故障引起的页面调进的数目。
既然所有I/O归于缺页故障,那这主要就是I/O量的测量。
大小
进程数据区的虚拟大小(在调页空间),用千字节表示(在其它标志中用SZ来表示)。
这个数目等于进程可用的工作段页的数目的4倍。
如果一些工作段页当前被调出,这个数字将大于所使用的实内存量。
SIZE包含了私有段的页面和进程的共享库数据段。
RSS
进程实内存(驻留集合)的大小,用千字节表示。
这个数值等于内存中的工作段页和代码段页数和的4倍。
记住代码段页是为所有当前程序运行的实例所共享的。
如果26个ksh进程正在运行,只有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-lIbos.perf.tools
svmon命令只能由root用户执行。
如果使用时间间隔(-i选项),统计信息将会一直显示直到命令被杀死或者直到达到了时间间隔的数值(可以刚好在该时间间隔后指定)。
可以使用下列不同的报告来分析所显示的信息:
全局(-G)
显示描述整个系统中实内存和调页空间的使用的统计信息。
进程(-P)
显示活动进程的存储使用统计信息。
段(-S)
显示指定段数的内存使用情况或者降序显示内存使用最高的十个进程。
段的详细信息(-D)
显示指定段的详细信息。
用户(-U)
显示指定登录名的内存使用统计信息。
如果不提供登录名列表,则显示所有定义的登录名的内存使用统计信息。
命令(-C)
显示某个命令名指定的进程的内存使用统计信息。
工作负载管理类(-W)
显示指定的工作负载管理类的内存使用统计信息。
如果不提供类,则显示所有定义的类的内存使用统计信息。
帧(-F)
显示帧的信息。
不指定帧的号码时,会报告使用的内存的百分比。
而当指定了帧号时,会报告该帧的信息。
层(-T)
显示层的信息,例如层号,使用-a标志时的超类名和实内存中属于层的段的总页数。
使用中的内存量
打印全局的统计信息,要用-G标志。
在这个示例里,我们在两秒时间间隔内重复了该命令五次。
#svmon-G-i25memoryinusepinpgspacesizeinusefreepinworkpersclntworkpersclntsizeinuse1638416250134********52939263620060040960126741638416254130********92939263620060040960126761638416254130********92939263620060040960126761638416254130********92939263620060040960126761638416254130********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标志时才会报告。
报告的值是所使用的实际调页空间页面数,这表明这些页面调出到了调页空间中。
它与vmstat命令的不同在于vmstat命令的avm一栏显示的是已访问但不一定调出的虚拟内存。
size
总调页空间的大小,以4K页计。
inuse
分配页的总数。
在示例中,总内存大小有16384页。
将这个数乘以4096就是总实内存的大小(64MB)。
其中16250页正在使用,而空闲列表中有134页,锁定在RAM中的有2006页。
在所有使用的页中,RAM中有10675页工作页面,2939页持久页面和2636页客户机页面。
这三个部分的总和等于memory部分中inuse一栏的数值。
pin部分除以锁定的内存大小可以得到工作、持久和客户机三类大小。
它们的和等于memory部分中的pin一栏的值。
调页空间总共有40960页(160MB),有12676页正在使用。
memory中的inuse一栏通常要比pgspace中的inuse一栏要大,当一个程序完成后,因为分配调页空间时文件页面占用的内存不会释放。
下面是svmon命令的输出示例:
#svmon-G-i25sizeinusefreepinvirtualmemory65527640871440590981136pgspace13107255824workpersclntpin591800inuse47554138382695sizeinusefreepinvirtualmemory65527640911436590981137pgspace13107255824workpersclntpin591800inuse47558138382695sizeinusefreepinvirtualmemory65527640911436590981137pgspace13107255824workpersclntpin591800inuse47558138382695sizeinusefreepinvirtualmemory65527640901437590981137pgspace13107255824workpersclntpin591800inuse47558138372695sizeinusefreepinvirtualmemory65527641681359591281206pgspace13107255824workpersclntpin592100inuse47636138372695
额外的输出字段是virtual字段,它说明了系统虚拟空间中分配的页数。
进程的内存使用情况
以下命令显示了使用内存最多的十个进程的统计信息。
如果不指定编号,则会显示系统中当前运行的所有进程。
#svmon-Pau10PidCommandInusePinPgspace15012maker4X.exe4783117447812750X43531178554415706dtwm32571174400317172dtsession29861174382721150dtterm29411174369717764aixterm2862117436442910dtterm28131174370519334dtterm28131174370413664dtterm28041174370617520aixterm280111743619进程标识符:
15012命令:
maker4X.exeSegidTypeDescriptionInusePinPgspaceAddressRange1572pers/dev/hd3:
620000..-1142pers/dev/hd3:
510000..-11bdepers/dev/hd3:
500000..-12c1pers/dev/hd3:
491000..79abpers/dev/hd2:
532891000..0404workkernelextension272700..245801d9bworklibdata390230..607909worksharedlibrarytext864070..655355a3worksreg[4]90120..327681096worksreg[3]320320..327831b9dworkprivate1057112190..1306:
65307..655351af8clnt961000..17160workkernel1792114634880..32767:
32768..65535...
输出分为摘要和细节两部分。
摘要部分降序列出了使用内存最多的十个进程。
Pid15012是使用了最多内存的进程标识。
Command表示了使用的命令的名称,这里是maker4X.exe。
Inuse一栏显示4783页,指的是进程使用的段在实内存中的总页数。
每一页大小为4KB。
Pin一栏显示1174页,指的是进程使用的段中锁定的总页数。
Pgspace列是进程使用的调页空间总页数,显示为4781页。
细节区域显示了摘要区域中显示的每个进程的每一段的信息。
这包括了段标识、段的类型、描述(段的文本描述,包括卷名和持久段的文件的i-node)、RAM中页的数量、RAM中锁定页的数量、调页空间中页的数量和地址范围。
AddressRange为持久段或者客户机段指定一个范围或者为工作段指定两个范围。
持久段或者客户机段的范围用‘0..x’的形式来表示,其中x是已使用的虚拟页面的最大数目。
工作段的字段范围可以是‘0..x:
y..65535’,其中0..x包含了全局数据,会增大,而y..65535包含了堆栈区域,会减小。
对于一个工作段的地址范围,是从两边开始分配空间直到中间。
如果工作段是非私有的(内核或共享库),空间的分配是不同的。
在本例中,段标识1b9d是私有工作段;它的地址范围是0..1306:
65307..65535。
段标识909是共享库文本工作段;它的地址范围是0..65535。
一个段可由多个进程使用。
这样的段里的每一个实内存页解释了每个使用该段的进程的Inuse字段。
因此,Inuse的总数可能超过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内存 性能监视 性能 监视