Android LowMemoryKiller相关

相关名词:

关键名词:adj、minfree

此关键名词:oom_score、oom_score_adj、oom_adj

内存相关:total、free、used、lost、VSS、RSS、PSS、USS

这里不讲解adj与lmk水位相关基础知识,重点在:如果不适用google的配置策略,如何使用自定义的水位的方法。

google的策略就是根据实际内存及屏幕尺寸来计算lmk的水位,一般够用,不过很多厂商都自己配置。

 

最近看个问题,就是当内存不足(这个不好定义,怎么叫不足?)的时候,系统可能卡,系统可能一直再杀进程。

什么时候杀进程,杀哪些进程,和系统剩余内存的关系是如何关联的?

这个问题就是adj和lmk了,基础知识部分需要百度学习下。(主要是adj相关)

一、调试

1.看内存:

adb shell dumpsys meminfo

会打印很多,按顺序打印每个进程所占用的内存,再最尾打印总信息:

total是总内存,free是可用内存,used是使用内存,lost是系统已经使用,但是无法确定哪里使用的(total-free-used得出)。

2.看内存使用略微详细及排名:

adb shell 并su(root权限),然后procrank

3.看具体某个进程的内存使用情况:

adb shell ps

之后,看到具体进程的进程号和名字,然后:

以上具体含义,进行百度了解。

当内存使用大体情况看到以后,看下lmk的水位及adj值:

看到adj值和lmk水位是一一对应的。

这里的lmk水位需要换算一下,如26624换算成m单位:26624*4/1024 = 104M,这个是page为单位(一page一般是4k)的数字,所以到m需要换算。

也就是当剩余104M内存时,lmk会杀死906级别(adj=906 code中是:static final int CACHED_APP_MAX_ADJ = 906;)的进程来释放内存。

那么一部设备,在什么水位杀哪些类进程,这个是比较难的,可能需要进行尝试来确定,或者是根据使用场景不通来确定。

这也就是手机中有:节能、省电、游戏模式的部分原理。在游戏模式,可能杀死后台所有的进程来保证游戏的流畅性,当然还有更多的是cpu、gpu的满频等调整。

手动尝试修改lmk水位:minfree

adb shell并su,然后输入命令

cat /sys/module/lowmemorykiller/parameters

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值