每日签到奶昔超市点数市场奶昔访达
返回列表 发布新帖
查看: 552|回复: 5

Android 系统内存不足时,kswapd 导致的性能问题之冷热文件回收

发表于 2025-6-1 14:27:39 | 查看全部 |阅读模式

欢迎注册论坛,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
​​Nubia 分享过一个APP性能卡顿案例,链接见:Android卡顿掉帧问题分析之实战篇 - 简书,说的是三方应用唯品会的首页界面上下滑动严重掉帧卡顿。
系统内存不足,kswapd 线程唤醒进行内存回收。一个是占用 cpu 资源,一个是导致唯品会 app 的 page cache 被回收。唯品会 app 作为当前应用,本身就要读写文件,io 问题又进一步加剧。
标准 linux 内核中,kswapd 负责页面回收(包括 Page Cache 的回收),其回收策略并非直接以进程为维度,而是通过内存的活跃性(Active/Inactive LRU 链表)和内核的回收算法间接实现的。

​以下是具体机制:
Linux 内核将页面分为两类 LRU 链表(每个内存节点和区域均有独立的链表):
  • Active List:存放最近被访问过的“活跃”页面。
  • Inactive List:存放可能未被频繁访问的“非活跃”页面,优先从这里回收。
Page Cache 页面(文件缓存)会被挂到这些链表中,并根据访问频率动态调整(通过“第二次机会”算法或类似机制)。

kswapd的回收逻辑主要基于以下原则:
  • 优先回收 Inactive List:首先尝试回收 Inactive List 中的页面,如果不足才会从 Active List 中迁移页面到 Inactive List。
  • 区分文件页(Page Cache)和匿名页:
  • 文件页(Page Cache):可被直接回收(丢弃后可从磁盘重新读取)。
  • 匿名页:需通过交换分区(Swap)换出,成本更高。

针对 Android 类系统,由于有当前 APP 的明显独特性。 回收算法有一个区分当前进程的页面和非当前进程的页面,对各个 APP 的文件进行冷热区分,比如常规的冷文件,温文件,热文件。优先回收冷文件,优先回收后台应用的冷文件。 前台应用的文件的回收优先级要降低。回收策略要进行调整,不要仅仅按 adj level 进行触发,还要一个常态化的 swap 运行策略,比如每分钟进行定时少量回收,降低内存不足时候的 kswapd 的突发性高开销,把这个摊平。
爱生活,爱奶昔~
回复

使用道具 举报

发表于 2025-6-1 14:34:34 | 查看全部
cy
爱生活,爱奶昔~
发表于 2025-6-1 22:05:23 | 查看全部
Nubia是哪家?努比亚还是诺基亚
爱生活,爱奶昔~
发表于 2025-6-1 22:17:43 | 查看全部
欢迎杨老板莅临 奶昔论坛 指导工作
爱生活,爱奶昔~
发表于 2025-6-1 22:20:17 | 查看全部
安卓这一块对于应用的控制还是没有苹果那么可控。
目前华为和苹果有的一拼。
运行同一款软件,华为8g内存的手机效果可能会比安卓12g手机更流畅一点。安卓的高开放性就注定了需要降低各个应用的把控度
爱生活,爱奶昔~
发表于 2025-6-1 22:24:12 | 查看全部
完全看不懂,这不就是唯品会毫无程序设计思维不按照系统原则编程导致的吗
爱生活,爱奶昔~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2025 Nyarime 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表