Android Lost RAM

Lost RAM  计算公式:

 long lostRAM = memInfo.getTotalSizeKb() -  (totalPss-totalSwapPss) - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb() -memInfo.getKernelUsedSizeKb()  - memInfo.getZramTotalSizeKb();

可以看到,出现lowmom问题是,Used RAM并不高,和正常的相差无几。发现问题出现时,Lost RAM异常的大,在总RAM一定的情况下,Used RAM稳定的情况下,Free RAM和Lost RAM 存在此消彼长的现象。

Lost RAM 统计信息中,除了totalSwapPss未在上述命令查询结果中直接显示外,其他信息直接可以使用命令查看到。

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

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

ZRAM:ZRAM中被用掉的部分。

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

你可能感兴趣的:(Android Lost RAM)