Android R中sys.lmk.minfree_levels是否只读?如何配置lowmemorykiller
结论1:sys.lmk.minfree_levels确实是只读属性
你的代码排查结论是正确的:sys.lmk.minfree_levels属于观测类展示属性,仅用来同步lmkd当前已生效的minfree和oom_adj配对规则,本身不会被lmkd读取加载。lmkd启动并完成规则加载后,会主动调用property_set将当前规则写入该属性,方便开发者快速查看当前配置,不需要再读取分散的内核节点。你手动修改这个属性的值不会对lowmemorykiller的杀进程策略产生任何影响。
结论2:lowmemorykiller的正确配置方法
根据使用场景不同,调整方式分为两类:
场景1:ROM固件开发者做永久配置
你可以修改设备侧的编译配置项,固件刷入后永久生效:
- 基础minfree+oom_adj配对规则修改:在对应设备的
device.mk中调整ro.lmk.minfree_levels属性值,格式和你之前了解的完全一致,示例:18432:23040,27648:32256,36864:46080,单位为KB,每一组为内存阈值:oom_adj阈值,多组用逗号分隔,lmkd启动时会主动读取这个属性加载规则。 - 如果你使用PSI(压力失速信息)模式的lmkd策略,还可以调整
ro.lmk.psi_partial_stall_ms、ro.lmk.psi_complete_stall_ms等属性,调整内存压力判定的触发灵敏度。 - oom_adj分级阈值调整可以修改
ro.lmk.adj_thresholds属性。
场景2:ROOT用户临时调整当前设备配置
直接写入对应的内核节点即可,调整后立即生效,重启后会恢复默认:
- 传统内核lowmemorykiller模式:将你要设置的minfree规则写入
/sys/module/lowmemorykiller/parameters/minfree节点即可。 - PSI模式的lmkd:可以修改
/proc/pressure/memory相关节点调整压力判定阈值。 - 如需永久生效,可以将写入命令添加到系统开机执行的init脚本中。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

