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为负数就是这个原因
网友评论