Android Low Memory Killer
2018-03-12 11:28
323 查看
在Android中,即使当用户退出应用程序之后,应用程序的进程也还是存在于系统中,这样是为了方便程序的再次启动,但是这样的话,随着打开的程序数量的增加,系统的内存会变得不足,就需要杀掉一部分进程以释放内存空间。至于是否需要杀死一些进程和哪些进程需要被杀死,是通过Low Memory Killer机制来进行判定的。 Android的Low Memory Killer基于Linux的OOM机制,在Linux中,内存是以页面为单位分配的,当申请页面分配时如果内存不足会通过以下流程选择bad进程来杀掉从而释放内存:
比如如果向/sys/module/lowmemorykiller/parameters/adj写入0,8,向/sys/module/lowmemorykiller/parameters/minfree中写入1024,4096,假设一个页面大小为4KB,这样当系统空闲内存位于1024*4~4096*4KB之间时oom_adj大于等于8的进程就会被杀掉。 在lowmemorykiller.c中定义了阈值表的默认值,可以通过init.rc自定义:
在init.rc中定义了init进程的oom_adj为-16,不可能会被杀死(init的PID是1):
alloc_pages -> out_of_memory() -> select_bad_process() -> badness()在Low Memory Killer中通过进程的oom_adj与占用内存的大小决定要杀死的进程,oom_adj越小越不容易被杀死。 Low Memory Killer Driver在用户空间指定了一组内存临界值及与之一一对应的一组oom_adj值,当系统剩余内存位于内存临界值中的一个范围内时,如果一个进程的oom_adj值大于或等于这个临界值对应的oom_adj值就会被杀掉。 可以通过修改/sys/module/lowmemorykiller/parameters/minfree与/sys/module/lowmemorykiller/parameters/adj来改变内存临界值及与之对应的oom_adj值。minfree中数值的单位是内存中的页面数量,一般情况下一个页面是4KB。
比如如果向/sys/module/lowmemorykiller/parameters/adj写入0,8,向/sys/module/lowmemorykiller/parameters/minfree中写入1024,4096,假设一个页面大小为4KB,这样当系统空闲内存位于1024*4~4096*4KB之间时oom_adj大于等于8的进程就会被杀掉。 在lowmemorykiller.c中定义了阈值表的默认值,可以通过init.rc自定义:
static int lowmem_adj[6] = { 0, 1, 6, 12, }; static int lowmem_adj_size = 4; static size_t lowmem_minfree[6] = { 3 * 512, /* 6MB */ 2 * 1024, /* 8MB */ 4 * 1024, /* 16MB */ 16 * 1024, /* 64MB */ };
static int lowmem_minfree_size = 4;
在init.rc中定义了init进程的oom_adj为-16,不可能会被杀死(init的PID是1):
on early-init # Set init and its forked children's oom_adj. write /proc/1/oom_adj -16
相关文章推荐
- Android分析之LowMemoryKiller
- Android进程回收机制LMK(Low Memory Killer)【转】
- Android分析之LowMemoryKiller
- Android 内存管理 - Low Memory killer & OOM
- Android lowmemorykiller分析
- Android Low Memory Killer
- Android Low memory killer
- Android low memory killer 详解
- Android内存管理机制之一:low memory killer
- 【android】进程优先级(Framework设置优先级,LowMemoryKiller查杀)
- Android Low Memory Killer
- Android对Linux内核的增强:Low Memory Killer(低内存管理)
- Android Low Memory Killer
- Android内核详解之Low memory killer
- Android内存分配分配机制 Low Memory Killer
- Android Low memory killer
- Android内存管理机制之一:lowmemory killer
- Android low memory killer 详解
- Android low memory killer 机制
- Android low memory killer 详解