内存方面主要关注两个问题,第一:物理内存够不够用;第二:有没有内存泄露。
物理内存够不够用,关注的是物理内存与Paging Space之间的交换情况。内存有没有泄露,需要长期关注进程所占用的内存分页(包括物理内存中的分页和Paging Space中的分页)。
这一节介绍在验证物理内存够不够用的过程中,观察的几个指标。
Paging Space In/Out这个指标是判定物理内存够不够用的最重要的指标。
1. 获取来源
Nmon PAGE Sheet:pgsin、pgsout
topas:PgspIn、PgspOut
2. 指标说明
PgspIn:每秒从Paging Space读入物理内存的4K分页的数量
PgspOut:每秒写到Paging Space的4K分页的数量
物理内存够用的情况下,这两个指标都是0。
如果这两个指标长期不为0,则一定是物理内存不足。
如果偶尔不为0,不一定是物理内存不足,需要具体问题具体分析。例如:一台服务器上白天做交易,晚上做批处理。白天做交易的时候交易进程占用90%的物理内存,晚上做批处理的时候,批处理进程进入物理内存,并把交易进程的内存挤到Paging Space里面。到第二天白天的时候,交易进程进入物理内存,把批处理的进程挤到Paging Space里面。这个场景下,物理内存是够用的,但每天有两个时间段PgspIn/Out不为0。
另外,不要把PageIn/PageOut和PgspIn/Out搞混了。
PageIn/PageOut是内存与文件系统之间的读写,是正常的内存缺页。CPU要数据,内存里面没有,就会产生内存缺页,然后去磁盘里面读这个页,对于程序来说,这是再正常不过的事,比如说,程序刚启动的时候,内存里面肯定是没有读进来什么数据。
PgspIn/Out是内存与Paging Space之间的读写。
3. 举例
正常情况下,PgspIn/Out(pgspace)是0,PageIn/PageOut(filesystem)是非0。
物理内存不足的情况下,PgspIn/Out是长期非0
而此时,从内存利用率的角度也一定是有问题的,如图