上午好☀️☀️☀️️
本答案参考通义千问
在16GB RAM的手机上,如果频繁被系统Killed后台进程(Killed by system),说明系统认为当前内存不足,为了保持前台应用流畅而主动终止了后台应用。这种情况通常与**Linux内核的Low Memory Killer (LMK)**机制有关。
🌟 问题核心分析
LMK(Low Memory Killer)是Android系统中用于管理内存的重要机制,它会根据系统内存状态决定哪些后台进程可以被杀掉。如果你希望减少后台应用被杀的概率,可以通过调整以下配置来优化:
✅ 解决方案:通过修改LMK参数改善后台缓存
1. 理解关键参数含义
| 参数 | 含义 | 建议值 |
|------|------|--------|
| ro.lmk.pgscan_limit | 控制扫描内存的频率,数值越小越频繁 | 3000(原值) |
| ro.lmk.swap_util_max | Swap使用上限(仅适用于有Swap的设备) | 90(原值) |
| ro.lmk.threshold_decay | 内存阈值衰减系数 | 50(原值) |
| ro.lmk.use_moto_strategy | 使用摩托罗拉策略(可能影响内存回收逻辑) | true(原值) |
| ro.lmk.psi_complete_stall_ms | PSI完成延迟时间 | 400(原值) |
| ro.lmk.psi_partial_stall_ms | PSI部分延迟时间 | 50(原值) |
| ro.lmk.file_high_percentage | 文件缓存高阈值 | 70(原值) |
| ro.lmk.file_low_percentage | 文件缓存低阈值 | 25(原值) |
| ro.lmk.swap_free_low_percentage | Swap空闲低阈值 | 10(原值) |
| ro.lmk.kill_heaviest_task | 是否优先杀死占用内存最多的任务 | true(原值) |
| ro.lmk.kill_heaviest_ordered | 按顺序杀死最重任务 | true(原值) |
| ro.lmk.kill_timeout_ms | 杀死超时时间 | 100(原值) |
| ro.lmk.stall_limit_medium | 中等延迟限制(未找到官方文档) | 1(原值) |
| ro.lmk.stall_limit_critical | 关键延迟限制 | 4(原值) |
| ro.lmk.stall_limit_freeze | 冻结延迟限制 | 15(原值) |
| ro.lmk.medium_min_adj | 中等优先级最低adj值 | 920(原值) |
| ro.lmk.critical_min_adj | 关键优先级最低adj值 | 201(原值) |
| ro.lmk.freeze_min_adj | 冻结优先级最低adj值 | 50(原值) |
| ro.lmk.kswapd_limit | kswapd内存限制 | 90(原值) |
| ro.lmk.kswapd_limit_decay | kswapd衰减系数 | 10(原值) |
| ro.lmk.kswapd_min_adj | kswapd最小adj值 | 201(原值) |
| ro.lmk.thrashing_limit | Thrashing限制 | 50(原值) |
| ro.lmk.thrashing_limit_critical | 关键Thrashing限制 | 50(原值) |
| ro.lmk.thrashing_limit_decay | Thrashing衰减系数 | 20(原值) |
| ro.lmk.min_thrashing_limit | 最小Thrashing限制 | 10(原值) |
🛠️ 优化建议
1. 降低LMK的敏感度
-
提高内存阈值:让系统更“宽容”地保留后台应用。
setprop ro.lmk.pgscan_limit 5000
setprop ro.lmk.swap_util_max 80
setprop ro.lmk.file_high_percentage 80
setprop ro.lmk.file_low_percentage 30
setprop ro.lmk.swap_free_low_percentage 15
-
增加内存回收延迟:
setprop ro.lmk.psi_complete_stall_ms 600
setprop ro.lmk.psi_partial_stall_ms 100
setprop ro.lmk.stall_limit_medium 2
setprop ro.lmk.stall_limit_critical 6
setprop ro.lmk.stall_limit_freeze 20
-
提高kswapd内存限制:
setprop ro.lmk.kswapd_limit 95
setprop ro.lmk.kswapd_limit_decay 5
-
增大thrashing限制:
setprop ro.lmk.thrashing_limit 70
setprop ro.lmk.thrashing_limit_decay 15
2. 避免过度杀进程
3. 持久化配置(需root权限)
上述命令只能临时生效,若想永久生效,需要将这些配置写入系统文件或使用自定义脚本启动时加载。
例如,在 /system/etc/init.d/ 目录下创建一个脚本文件(如 99_lmk.sh),内容如下:
#!/bin/sh
setprop ro.lmk.pgscan_limit 5000
setprop ro.lmk.swap_util_max 80
setprop ro.lmk.file_high_percentage 80
setprop ro.lmk.file_low_percentage 30
setprop ro.lmk.swap_free_low_percentage 15
setprop ro.lmk.psi_complete_stall_ms 600
setprop ro.lmk.psi_partial_stall_ms 100
setprop ro.lmk.stall_limit_medium 2
setprop ro.lmk.stall_limit_critical 6
setprop ro.lmk.stall_limit_freeze 20
setprop ro.lmk.kswapd_limit 95
setprop ro.lmk.kswapd_limit_decay 5
setprop ro.lmk.thrashing_limit 70
setprop ro.lmk.thrashing_limit_decay 15
然后赋予执行权限:
chmod +x /system/etc/init.d/99_lmk.sh
📌 注意事项
- 不要随意关闭所有内存回收机制,否则可能导致系统崩溃或卡顿。
- 某些参数(如
stall_limit_*、thrashing_limit*)没有官方文档支持,建议先测试后再部署。 - 如果你不是开发者或不熟悉系统底层,不建议随意修改这些参数,以免导致系统不稳定。
✅ 总结
通过合理调整LMK相关参数,可以有效缓解16GB RAM手机频繁被K后台的问题,但需注意平衡性能和稳定性。
📋 重点步骤总结:
- 提高内存阈值,如
ro.lmk.pgscan_limit 和 ro.lmk.file_high_percentage。 - 增加内存回收延迟,如
ro.lmk.psi_complete_stall_ms。 - 优化kswapd和thrashing设置,提升后台应用存活率。
- 持久化配置,确保每次重启后都生效。
- 谨慎关闭某些策略,避免系统异常。
如需进一步帮助,可提供你的手机型号和系统版本,我可以帮你定制更具体的配置方案。