最近遇到一个Lost RAM占用内存达到1,296,701K,Free RAM只有157,924K 出现lowmom问题:
MemInfo: 43,292K slab, 114,292K shmem, 65,292K vm alloc, 12,324K page tables 5,568K kernel stack
1,572K buffers, 269,472K cached, 188,532K mapped, 75,412K free
ZRAM: 4K RAM, 520,908K swap total, 520,908K swap free
Free RAM: 157,924K
Used RAM: 591,439K
Lost RAM: 1,296,701K
可以看到,出现lowmom问题是,Used RAM并不高,和正常的相差无几。
发现问题出现时,Lost RAM异常的大。
查阅相关资料,发现Lost RAM可能来自下面几个方面:
ION:我们知道很多多媒体的应用使用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为负数就是这个原因。
未完,待续。。。