Nubia 分享过一个APP性能卡顿案例,链接见:Android卡顿掉帧问题分析之实战篇 - 简书
三方应用唯品会的首页界面上下滑动严重掉帧卡顿:
系统内存不足,kswapd 线程唤醒进行内存回收。一个是占用 cpu 资源,一个是导致唯品会 app 的 page cache 被回收。唯品会 app 作为当前应用,本身就要读写文件,io 问题又进一步加剧。
标准 linux 内核中,kswapd 负责页面回收(包括 Page Cache 的回收),其回收策略并非直接以进程为维度,而是通过内存的活跃性(Active/Inactive LRU 链表)和内核的回收算法间接实现的。
以下是具体机制:
Linux 内核将页面分为两类 LRU 链表(每个内存节点和区域均有独立的链表):
Page Cache 页面(文件缓存)会被挂到这些链表中,并根据访问频率动态调整(通过“第二次机会”算法或类似机制)。
kswapd的回收逻辑主要基于以下原则:
针对 Android 类系统,由于有当前 APP 的明显独特性。 回收算法有一个区分当前进程的页面和非当前进程的页面,对各个 APP 的文件进行冷热区分,比如常规的冷文件,温文件,热文件。优先回收冷文件,优先回收后台应用的冷文件。 前台应用的文件的回收优先级要降低。回收策略要进行调整,不要仅仅按 adj level 进行触发,还要一个常态化的 swap 运行策略,比如 每分钟进行定时少量回收,降低内存不足时候的 kswapd 的突发性高开销,把这个摊平。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。