最近一段时间我们系统里的这个现象困扰了我们很久,因此发个帖子想请大家帮忙指导一下思路。问题如下:OS version:
Red Hat Enterprise Linux Server release 6.9从系统上线以来,内存free部分持续减少,chache持续增加,基本上增加的部分就是/proc/meminfo 中的active(file)增加的大小。系统上跑的是oracle数据库。虽然linux将文件缓存到chache中是正常行为,但是这个现象一直持续,想搞明白是什么东西一直在缓存file。之前使用了内存抓取工具crash按以下命令抓取进程中文件信息:crash> foreach files -c -R REG按照我的理解,其中NRPAGES是该进程下该文件的Page数量,将每个进程下面缓存的所有文件的NRPAGES汇总即可计算出这一时刻每个进程缓存文件的总大小,然后挑两天的进行对比,即可找出是哪些进程缓存的文件增加了。
共收集和对比5天的数据如下表所示:
date NRPAGE G cache G active(file) G
0530 333.5267372 104 34.26329041
0604 336.3472214 108 36.19488525
0613 253.810276 109 38.11073303
0615 257.9771004 111 38.61402893
0620 256.5512581 113 40.540924070604对比0530发现NRPAGE总和的增加与active(file)的增加基本一致,对比每个进程发现是某个工具的Java进程缓存文件增加所导致,将该工具进程重启,对应的java缓存文件的大小大大降低。但是cache没有得到释放。整个现象依然没有得到改变,可以看到从0604到0613到0615到0620,active(file)依然持续增加,但是通过crash所获取的缓存中文件的大小总和却没什么变化,两边对应不上了,这就让我困惑了。请熟悉Linux内存管理的前辈指点一下,该如何去查找和定位该现象产生的原因呢。
谢谢大家!

解决方案 »

  1.   

    crash> foreach files -c -R REG 输出格式类似如下:
    PID: 2203 TASK: ffff88132d169c00 CPU: 30 COMMAND: "oracle_2203_ncd"
    ROOT: / CWD: /u01/app/oracle/product/12.2.0.1/dbhome_1/dbs 
    FD INODE                 I_MAPPING          NRPAGES TYPE PATH
    7 ffff8825ecbbe588 ffff8825ecbbe6e0 329 REG /u01/app/oracle/product/12.2.0.1/dbhome_1/rdbms/mesg/oraus.msb
    14 ffff8827bdb900e8 ffff8827bdb90240 1 REG /tmp/.oracle/oracle_xrc_domain_cm.192.168.10.57.31776
    16 ffff8825ecb63108 ffff8825ecb63260 15 REG /u01/app/oracle/product/12.2.0.1/dbhome_1/rdbms/mesg/orazhs.msb
    17 ffff8825ecbbe588 ffff8825ecbbe6e0 329 REG /u01/app/oracle/product/12.2.0.1/dbhome_1/rdbms/mesg/oraus.msb