staticvoidcmd_procprio(intpid, intuid, intoomadj) {structproc*procp;。。。还是利用/proc文件系统进行更新snprintf(path, sizeof(path), "/proc/%d/oom_score_adj", pid);snprintf(val, sizeof(val), "%d", lowmem_oom_adj_to_oom_score_adj(oomadj));writefilestring(path, val);。。。} 简单...
oom_adj代表进程的优先级,数值越高,优先级越低,越容易被杀死;对应每个oom_adj都可以有一个空闲内存的阀值。Android Kernel每隔一段时间会检测当前空闲内存是否低于某个阀值。假如是,则杀死oom_adj最大的不必要的进程,如果有多个,就根据oom_score_adj去杀死进程,直到内存恢复低于阀值的状态。 LowMemoryKiller的值的...
16MB在lowmem_minfree第三个位置,取lowmem_adj第三个位置即6,ok所有Oomadj大于6的进程就被选中了。而lowmemorykiller不是把这些选中的进程都干掉,而是先干掉oomAdj最大而且占用内存最大的进程。如下lowmemorykiller.c#lowmem_scan: for_each_process(tsk) { ... oom_score_adj = p->signal->oom_score_adj;...
}// LMK_PROCPRIO的主要作用就是更新进程的oomAdj// 将上层传递过来的数据(pid以及优先级)写到该进程对应的文件节点// /proc/pid/oom_score_adjsnprintf(path,sizeof(path),"/proc/%d/oom_score_adj", pid);snprintf(val,sizeof(val),"%d", oomadj);writefilestring(path, val);// 如果使用kernel的...
对于应用进程来说,也需要有自身的adj,由AMS负责更新。定义在oom_adj和oom_score_adj文件中: /proc/pid/oom_adj:代表当前进程的优先级,这个优先级是kernel中的优先级。 /proc/pid/oom_score_adj:这个是AMS上层的优先级,与ProcessList中的优先级对应 比如查看一下头条进程的adj值,如下: jason:/ # ps -ef |...
LMK_PROCPRIO: 向/proc/<pid>/oom_score_adj写入oomadj,则直接返回; LMK_PROCREMOVE:不做任何事,直接返回; LMK_TARGET:分别向/sys/module/lowmemorykiller/parameters目录下的minfree和adj节点写入相应信息; 四. Kernel层 lowmemorykiller driver位于 drivers/staging/Android/lowmemorykiller.c ...
当Kernel遇到OOM的时候,可以有2种选择: 1) 产生kernelpanic(死机) 2) 启动OOM killer,选择一个或多个“合适”的进程,干掉那些选择中的进程,从而释放内存。 在OOM机制当中,有几个参数是必须了解的,这几个参数分别是oom_adj,oom_score_adj,oom_score。每个进程都会有这样的3个参数,他们位于/proc/XXX/目录下(...
(); 138 return 0; 139 } 140 oom_score_adj = p->signal->oom_score_adj;/* 获得进程的oom_score_adj */ 141 if (oom_score_adj < min_score_adj) { /* 如果当前进程的adj比分数线adj小的话,这样的进程不能杀,可以理解为这样的进程有特权,优先级高 */ 142 task_unlock(p); 143 continue;...
它利用lowmem_adj和lowmem_minfree这两个数组来作为评判当前内存不足的标准。如,当前系统空闲内存是63M时,比owmem_minfree[3]小,那么就会选择比lowmem_adj[3]的oom score adj大的进程中找到一个oom score adj最大的将其杀掉,当两个进程的oom score adj一样时,会选择内存占用最多杀掉!数组其他部分以此类推...
例如:当内存低于9216时,会杀掉adj>=15的进程 对每个进程来说: /proc/pid/oom_adj:代表当前进程的优先级,这个优先级是kernel中的优先级,这个优先级与上层的优先级之间有一个换算。 /proc/pid/oom_score_adj:上层优先级,跟ProcessList中的优先级对应