`

Low memory killer

 
阅读更多

 

1,引入原因

   Android是一个多任务系统,也就是说可以同时运行多个程序,这个大家应该很熟悉。一般来说,启动运行一个程序是有一定的时间开销的,因此为了加快运行速度,当你退出一个程序时,Android并不会立即杀掉它,这样下次再运行该程序时,可以很快的启动。随着系统中保留的程序越来越多,内存肯定会出现不足,low memory killer就是在系统内存低于某值时,清除相关的程序,保障系统保持拥有一定数量的空闲内存。

 

 

2,基本原理和重要概念

   Low memory killer根据两个原则,进程的重要性和释放这个进程可获取的空闲内存数量,来决定释放的进程。

(1)进程的重要性,由task_struct->signal_struct->oom_adj决定。

Android将程序分成以下几类,按照重要性依次降低的顺序:

名称 oom_adj 解释 
FOREGROUD_APP 0 前台程序,可以理解为你正在使用的程序 
VISIBLE_APP 1 用户可见的程序 
SECONDARY_SERVER 2 后台服务,比如说QQ会在后台运行服务 
HOME_APP 4 HOME,就是主界面 
HIDDEN_APP 7 被隐藏的程序 
CONTENT_PROVIDER 14 内容提供者, 
EMPTY_APP 15 空程序,既不提供服务,也不提供内容


    其中每个程序都会有一个oom_adj值,这个值越小,程序越重要,被杀的可能性越低。

(2)进程的内存,通过get_mm_rss获取,在相同的oom_adj下,内存大的,优先被杀。

(3)那内存低到什么情况下,low memory killer开始干活呢?Android提供了两个数组,一个lowmem_adj,一个lowmem_minfree。www.linuxidc.com前者存放着oom_adj的阀值,后者存放着minfree的警戒值,以page为单位(4K)。

oom_adj 内存警戒值( 以4K为单位)
 
0 1536 
1 2048 
2 4096 
7 5120 
14 5632 
15 6144

3 log信息:

select 4203 (com.android.mms), adj 7, size 7035, to kill

ActivityManager: Process com.android.mms (pid 4203) has died.

分享到:
评论

相关推荐

    【性能】OOM原理解析:LowMemoryKiller原理

    随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足, 那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了lmk,全称为LowMemoryKiller(低内存杀手),lmkd来决定什么...

    Android内核驱动——内存管理

    ### Android内核驱动——内存管理:深入理解LowMemoryKiller机制 #### 一、LowMemoryKiller概述 在深入探讨LowMemoryKiller之前,我们先了解下它的背景和作用。LowMemoryKiller(低内存杀手)是Android内核中一种...

    Android内核驱动——内存管理.pdf

    Low Memory Killer 提供了三个用户接口,分别是设置空闲内存阈值的接口 /sys/module/lowmemorykiller/parameters/minfree,设置对应优先级的接口 /sys/module/lowmemorykiller/parameters/adj,设置各个进程优先级的...

    android 内存分析

    LowMemoryKiller 的核心逻辑实现在文件 `drivers/staging/android/lowmemorykiller.c` 中,通过注册 **CacheShrinker** 实现。CacheShrinker 本身是 Linux 内核用于回收内存页面的一种机制,通常由内核线程 kswapd ...

    Android内核驱动—内存管理

    具体来说,LowMemoryKiller通过注册CacheShrinker来实现其功能,源代码位于`drivers/staging/android/lowmemorykiller.c`中。 - **注册过程**:在模块初始化时,通过`register_shrinker(&lowmem_shrinker)`函数将...

    android低内存管理策略

    LOWMEMORYKILLER是Android系统中负责内存管理的重要组件,它的主要任务是在系统检测到内存紧张时,根据预定义的策略,有序地终止那些非关键进程,从而释放内存空间,保证前台应用和服务的正常运行。这一机制的核心...

    Android应用程序进程管理

    这个PPT讲Android应用程序进程的启动和回收,主要涉及到Zygote进程、System Server进程,以及组件管理服务ActivityManagerService、窗口服务WindowManagerService,还有专用驱动Low Memory Killer。通过了解Android...

    Android双进程守护

    在Android系统中,进程守护是一种确保应用程序即使在主进程被杀死的情况下也能持续运行的技术。"Android双进程守护"是Android开发中的一个高级话题,它涉及到系统级服务、进程管理和NDK(Native Development Kit)的...

    Android 内核分析报告4

    ### Android内核分析报告:LowMemoryKiller深入解析 #### 一、基本原理 在Android系统中,**LowMemoryKiller**(以下简称LMK)是一种用于管理系统内存资源的重要机制。当系统的物理内存达到一定程度的紧张状态时,...

    android内存管理了解.pptx

    LMK的实现位于`drivers/staging/Android/lowmemorykiller.c`,它通过注册为Cache Shrinker来参与内存回收过程。在内存不足时,内核线程kswapd会调用注册的Shrinker回调函数,即`lowmem_shrink`,以回收内存页。 2. ...

    android内存管理机制分析[归类].pdf

    这部分代码位于`drivers/staging/Android/lowmemorykiller.c`。与Linux标准的OOM(Out Of Memory)管理器相比,它更加智能和灵活。 匿名共享内存(ashmem)允许进程之间共享大块内存,同时提供了内核回收和管理这些...

    GPU_嵌入式-常用知识&面试题库_大厂面试真题.pdf

    涵盖了Android系统中GPU相关的技术和概念,包括Hardware Abstraction Layer (HAL)、Alpha Blending、SurfaceFlinger、Android Logger、Android Binder、Power Management、Low Memory Killer、Android PMEM、USB ...

    Android内核和驱动篇-Android内核介绍[归纳].pdf

    源代码位于 drivers/staging/android/lowmemorykiller.c。 Low Memory Killer 是 Android 中的一种内存管理机制。当系统内存不足时,它可以杀死一些进程以释放内存,从而确保系统的稳定性。 4. 匿名共享内存...

    Android-OOM.rar_memory android_memory for Android_out

    - Logcat日志:查找“dalvikvm-heap”或“Low Memory Killer”相关的错误信息。 - ANR(Application Not Responding):长时间执行主线程任务,导致系统认为应用无响应,也会显示OOM。 **4. 解决策略** - 对象复用...

    Android内存回收机制

    2、lowmemorykiller GC GC是java虚拟机的内存回收机制。Android GC原理探究https://www.jianshu.com/p/a7f31aee4e2e lowmemorykiller lowmemorykiller总结:https://www.jianshu.com/p/09922ab0390b oom 按照喜欢有...

    R16 Android方案内存配置说明.pdf

    - **lowmemorykiller机制**:当系统空闲内存较少时,此机制会杀死优先级低且占用内存多的应用,以回收内存。系统根据定义的进程优先级以及当前内存状况来决定何时触发内存回收。 **内核配置**: 文档中详细介绍了...

    N合一优化 Boosters Plus Battery Saver Pro v5.7.9

    这不会改变lowmemorykiller设置,不会清理内存,不会加速处理器/ OC,等像其他应用程序一样,但是这个应用程序将为所有层管理内核的过程,所以你会得到最快的任何进程(任何)你的ROM。 你不会找到任何不同的分数在基准测试...

    android调试经验总结

    Android将应用程序的重要性分为多个级别,通过“LowMemory Killer”机制来决定哪些进程会被优先结束以回收内存。理解这些基本概念有助于更好地分析和调试Android应用的稳定性问题。 二、常用查看系统状态和内存命令...

Global site tag (gtag.js) - Google Analytics