http://blog.csdn.net/gcc_sky/article/details/21093309
5 Android适配低内存
5.2 Android平台优化
5.2.1 改善内存管理
- 已验证过的省内存内核配置:Kernel Same-page Merging(KSM)和交换到ZRAM
- 杀掉哪些无法再缓存或已缓存过大的进程
- 禁止开销大的服务嵌入到Android服务,所以不会导致luncher被杀掉
- 杀掉哪些长期空转的进程,尽管是一般不可杀的当前IME
- 系列化launch的后台服务
- 微调低配设备的内存使用:加大OOM的调整级别,更小的图形缓存,等
5.4 内核配置
5.4.1 调节kernel/ActivityManager,减少内存直接回收
当一个进程或内核尝试分配一页内存(直接或者在产生新的page fault),但内核已用光所有可用的内存时,内存直接回收将被触发。
当释放页时,内核需要阻塞分配内存。接着轮流请求磁盘I/O协会脏的page,或者等待lowmemorykiller去杀掉一些进程,这将为每个线程带来额外的I/O开销。
内核有触发kswapd或者后台回收的watermarks,这些线程将周期性地回收内存。触发后台内存回收的默认阈值相当低,2GB的设备为2MB,512MB的设备配置为636KB。
内核在后台回收通常仅仅回收几MB内存,这意味着进程只要申请超过几M内存,那么很快就会被直接回收。
这次升级提供补丁去配置一些预留的内存,如:/proc/sys/vm/extra_freekbytes
5.4.3 KSM(Kernel samepage merging)
KSM是一个运行在后台的线程,用来比较内存中哪些页在上层程序运行时被标记为MADV_MERAGEABLE;如果发现两个page相同,KSM线程就会把它们合并到一个写时拷贝的页中。KSM可以为系统节省内存,但同时因为内存拷贝操作,而带来更大功耗。
打开内核选项:CONFIG_KSM
上层配置借口:
write /sys/kernel/mm/ksm/pagestoscan 100
write /sys/kernel/mm/ksm/sleepmillisecs 500
write /sys/kernel/mm/ksm/run 1
相关调试工具:procrank,librank,&ksminfo