lowmemorykiller


frameworks\base\services\core\java\com\android\server\am\ProcessList.java

static final int VISIBLE_APP_ADJ = 100;
static final int VISIBLE_APP_LAYER_MAX = PERCEPTIBLE_APP_ADJ - VISIBLE_APP_ADJ - 1;

// This is the process running the current foreground app.  We'd really
// rather not kill it!
static final int FOREGROUND_APP_ADJ = 0;

// This is a process that the system or a persistent process has bound to,
// and indicated it is important.
static final int PERSISTENT_SERVICE_ADJ = -700;

// This is a system persistent process, such as telephony.  Definitely
// don't want to kill it, but doing so is not completely fatal.
static final int PERSISTENT_PROC_ADJ = -800;

定义应用不同情况下的  adj 。


private int[] mOomAdj;
private int[] mOomMinFree;

分别对应adj 与 内存,是对应的

if (mTotalMemMb <= LOW_LEVEL_SIZE) {
    mOomAdj = new int[] {
        FOREGROUND_APP_ADJ,
        VISIBLE_APP_ADJ,
        PERCEPTIBLE_APP_ADJ,
        BACKUP_APP_ADJ,
        CACHED_APP_MIN_ADJ,
        CACHED_APP_MAX_ADJ
    };
    mOomMinFree = new int[] {
        24576, // 24 * 1024 (ADJ 0 -> 24MB)
        31744, // 31 * 1024 (ADJ 1 -> 31MB)
        38912, // 38 * 1024 (ADJ 2 -> 38MB)
        49152, // 48 * 1024 (ADJ 3 -> 48MB)
        122880, // 120 * 1024 (ADJ 9 -> 120MB) (based on AMR performance test)
        122880  // 120 * 1024 (ADJ 15 -> 120MB) (based on AMR performance test)
    };

一组默认的对应,第一个元素对应:当内存小于24MB 时,对应adj 大于 FOREGROUND_APP_ADJ 应用均可能被杀掉。
                最后一个元素对应:当内存小于120MB时,对应adj 大于 CACHED_APP_MAX_ADJ 的应用会被杀掉。
 
 
 
 
 
 
 
 
这里adj 是 -11 ~ 15 似乎跟  mOomAdj 对应不上,这里其实是同一个意思,只是有一个换算。
 
 
 
 
kernel-3.18/include/uapi/linux/oom.h
#ifndef _UAPI__INCLUDE_LINUX_OOM_H
#define _UAPI__INCLUDE_LINUX_OOM_H


/*
 * /proc/<pid>/oom_score_adj set to OOM_SCORE_ADJ_MIN disables oom killing for
 * pid.
 */
#define OOM_SCORE_ADJ_MIN       (-1000)
#define OOM_SCORE_ADJ_MAX       1000


/*
 * /proc/<pid>/oom_adj set to -17 protects from the oom killer for legacy
 * purposes.
 */
#define OOM_DISABLE (-17)
/* inclusive */
#define OOM_ADJUST_MIN (-16)
#define OOM_ADJUST_MAX 15


#endif /* _UAPI__INCLUDE_LINUX_OOM_H */
 
 
 
 
kernel-3.18\drivers\staging\android\lowmemorykiller.c
 
 
static short lowmem_oom_adj_to_oom_score_adj(short oom_adj)
{
   if (oom_adj == OOM_ADJUST_MAX)
      return OOM_SCORE_ADJ_MAX;
   else
      return (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE;
}

这个函数说明了
adj 是 -11 ~ 15 跟  mOomAdj 换算关系。
 
 
 
 
/sys/module/lowmemorykiller/parameters/adj
 
 
/sys/module/lowmemorykiller/parameters/minfree
 
 
对应的是 mOomAdj 与 mOomMinFree转换成页之后的值
 
 
/proc/1052{$pid}/下
oom_adj         oom_score       oom_score_adj
oom_adj  与oom_score_adj  是  adj  -11 ~ 15 跟  mOomAdj  对应一样的
 
 
 
 
 
 
system/core/lmkd/lmkd.c
 
 
http://gityuan.com/2016/09/17/android-lowmemorykiller/

 


猜你喜欢

转载自blog.csdn.net/lei7143/article/details/78425302
今日推荐