Lost Ram

AMS-->dumpApplicationMemoryUsage

pw.print(" Lost RAM: ");pw.print(memInfo.getTotalSizeKb()-totalPss-memInfo.getFreeSizeKb() -memInfo.getCachedSizeKb()                        -memInfo.getKernelUsedSizeKb());pw.println(" kB");

LostRAM让人误解,以为系统有memoryleak.导致memory丢失.事实上这里的memory统计并不准确.我们在有的手机上可以看到LostRAM为负数或者接近于0.而在有的手机上看到这个值很大.下面我们来分析其lostRAM的来源.

Lost RAM可能来自下面五个方面:

ION.我们知道很多多媒体的应用使用ION来分配memory的.大多数芯片供应商是没有把这部分Memory map到process中,也就没有统计在cached中.而ION为了分配效率会把这部分用过的memory先cached以便下次使用的时候直接从cache中分配,从而加快了分配速度,提高了系统性能.而当系统的memory吃紧时,这部分cached memory会free.这往往是Lost RAM的主要来源.

KGSL. Graphic系统分配的内存.这边分内存可能已经map到了process中,也有可能没有map到process中,取决于芯片厂商的实现.如果没有map到process ,这也是Lost RAM的重要来源.

ZRAM中被用掉的部分

多次计算用过的memory,例如filecache ,DSS等.常见的Lost RAM为负数就是这个原因.

其它计算不准备的memory.

事实上我们可以从其它memoryinfo来确定是否有memory leak或其它问题.

adb shell pull /d/ion  your folder   //可以检查heaps来确定cached ION memory.

adb shell cat /d/kgsl/proc/*/mem > kgsl_mem.txt //可以用例看每个processgfx所用的memory.

adb shel cat /proc/meminfo 或者 adb shell cat /proc/zoneinfo//获得更准确的memoryinfo

adb shell cat /d/shrinker   //查看可以free的memory大小及其优先级.

adb shell cat /sys/class/kgsl/kgsl/page_alloc  //kgsl  /1024/1024 gfx 分配的size

adb shell cat /sys/kernel/debug/ion/heaps/system  //ION  total  /1024/1024

你可能感兴趣的:(Lost Ram)