【Android Performance】Vmpressure与LMKD协作机制详解——从内存压力公式到进程回收决策的完整链路
文章目录
- Android系统性能优化:Vmpressure与LMKD协作机制详解——从内存压力公式到进程回收决策的完整链路
- 导入语
- 1 ~> 先看全局:Vmpressure 和 LMKD 各自扮演什么角色
- 1.1 一个"感知"、一个"执行"
- 1.2 协作链路总览
- 2 ~> Vmpressure:内存压力是怎么算出来的
- 2.1 核心定义与公式
- 2.2 scanned 和 reclaimed 到底指什么
- 2.3 手算两个例子
- 2.4 三个压力等级
- 3 ~> 压力信号如何跨越内核与用户态送达 LMKD
- 3.1 eventfd + epoll 的通知机制
- 3.2 一次完整的信号旅程
- 4 ~> LMKD 收到通知后:杀谁、杀多少
- 4.1 oom_adj:每个进程的"生死分数"
- 4.2 minfree:内存水位线
- 4.3 压力等级决定回收力度
- 4.4 一次回收的完整决策流程
- 5 ~> 实战:观察 Vmpressure 与 LMKD 的一举一动
- 5.1 查看 LMK 相关配置
- 5.2 从日志里抓 LMKD 杀进程的实锤
- 5.3 制造一次真实的内存压力
- 6 ~> Vmpressure 的短板与 PSI 的接班
- 6.1 Vmpressure 不是完美的信号源
- 6.2 PSI:新一代压力感知方案
- 思考 && 总结
- 结尾
Android系统性能优化:Vmpressure与LMKD协作机制详解——从内存压力公式到进程回收决策的完整链路
📖文章简介:本文系统讲解Android低内存管理中Vmpressure与LMKD这对经典搭档的工作原理。文章从Vmpressure的核心定义切入——它表示"当前已扫描内存中不可回收内存的比例",深度拆解其计算公式 Vmpressure = [1-(reclaimed/scanned)]×100 中 scanned 与 reclaimed 两个内核计数器的真实含义,并用手算实例演示压力值的推导过程。文中详解Vmpressure三个压力等级(LOW/MEDIUM/CRITICAL)的划分标准、压力信号通过 eventfd + epoll 送达LMKD的完整路径、以及LMKD收到通知后如何结合 oom_adj 分值与 minfree 水位线决定"杀谁、杀多少"。配以Mermaid时序图展示内核到用户态的信号旅程,附实战观察命令,适合从事Android内存管理和系统稳定性优化的工程师阅读参考。
🎬 个人主页:
