Android lmk (lowmemorykiller) and lmkd 白名单

[DESCRIPTION]

lowmemorykiller 可能误杀一些进程,比如 测试测序,特别重要但占用内存比较大的程序等

可能使用到添加白名单的方法,避免被误杀

[SOLUTION]

(一)首先看是lowmemroy 还是  lmkd

查看方法看: 两种

(1)

▪/sys/module/lowmemorykiller/parameters/adj  里面的值

0,0,0,0,0,0 → lmkd  //o版本是没有这个值的

0,100,200,300,900,906  → lowmemorykiller

(2)看“lowmemroykiller” 出现的位置

kernel log→ lowmemorykill

main log → lmkd 

 

(二)

判断好了后根据两种方式加入白名单,也可以都加入:

注意更改方法是 o 版本的更改方法,其他版本稍有变化

LMKD

1.

\system\core\lmkd\lmkd.c

/* Kill one process specified by procp.  Returns the size of the process killed */
static int kill_one_process(struct proc* procp, int min_score_adj, bool is_critical) {
    int pid = procp->pid;
    uid_t uid = procp->uid;
    char *taskname;
    int tasksize;
    int r;

    taskname = proc_get_name(pid);
    /* MTK begin */

    char packageName[20] = {""};
    strncpy(packageName, taskname, sizeof("com.antutu"));
    ALOGE("MTK_packageName=%s,taskname=%s,strcmp=%d",packageName,taskname,strcmp(packageName,"com.antutu"));
    if(!strcmp(packageName,"com.antutu")){
        return -1000;
    }
    /* MTK end */

 

2.\system\core\lmkd\lmkd.c

o版本
\system\core\lmkd\lmkd.c

static int find_and_kill_process(bool is_critical) {
    int i;
    int killed_size = 0;
    int min_score_adj = is_critical ? critical_oomadj : medium_oomadj;

    for (i = OOM_SCORE_ADJ_MAX; i >= min_score_adj; i--) {
        struct proc *procp;

retry:
        procp = proc_adj_lru(i);

        if (procp) {
            killed_size = kill_one_process(procp, min_score_adj, is_critical);

            /* MTK begin*/
    if(killed_size == -1000){
                ALOGE("MTK_killed_size == -1000 and jump kill_one_process");
            }else if (killed_size < 0) {
    /* MTK end */
                goto retry;
            } else {
                return killed_size;
            }
        }
    }

 

p版本

由于p版本这个地方google进行了更新,可能部分版本可以参照上面的的方法,如果发现有更改则使用下面的更改方法

\system\core\lmkd\lmkd.c

static int find_and_kill_process(bool is_critical) {

..

break;

killed_size = kill_one_process(procp, min_score_adj, level);
/* MTK begin*/
if(killed_size == -1000){
ALOGE("MTK_killed_size == -1000 and jump kill_one_process");
continue;
}
/* MTK end*/
if (killed_size >= 0) {
#ifdef LMKD_LOG_STATS
if (enable_stats_log && !lmk_state_change_start) {
lmk_state_change_start = true;
stats_write_lmk_state_changed(log_ctx, LMK_STATE_CHANGED,
LMK_STATE_CHANGE_START);
}

 

lowmemroykiller

3.18/drivers/staging/android/lowmemorykiller.c

rcu_read_lock();
for_each_process(tsk) {
struct task_struct *p;
short oom_score_adj; 

    //lowmem_print(1,"mtk jump lowmemorykiller_1 tsk->comm=%s",tsk->comm);
/* mtk begin */
    if(tsk->comm){
    if((strstr(tsk->comm,"tutu.ABenchMark")!=NULL)
        ||(strstr(tsk->comm,"ABenchMark:push")!=NULL)
        ||(strstr(tsk->comm,"benchmark:full")!=NULL))
        ||(strstr(tsk->comm,"chMark:refinery")!=NULL)){
         lowmem_print(1,"mtk_lowmemorykiller jump kill 'tutu.ABenchMark' 'ABenchMark:push' 'benchmark:full' \n");
         continue;
         }
    }
      /* mtk end */

 

添加白名单的名字是如何确定的?

搜索关键字lowmemorykiller ,  killing 的 apk  name 就添加到上面的代码中就可以了

11-30 11:08:03.668 <6>[10425.252789] (3)[92:kswapd0]lowmemorykiller: Killing 'android.vending' (23456) (tgid 23456), adj 100,
11-30 11:08:03.839 <6>[10425.423820] (2)[92:kswapd0]lowmemorykiller: Killing 'magazineservice' (9338) (tgid 9338), adj 100,
11-30 11:08:03.868 <6>[10425.452692] (1)[92:kswapd0]lowmemorykiller: Killing 'dboxed_process0' (16792) (tgid 16792), adj 100,
11-30 11:08:03.904 <6>[10425.488277] (1)[92:kswapd0]lowmemorykiller: Killing 'hbox:interactor' (9455) (tgid 9455), adj 100,
11-30 11:08:04.112 <6>[10425.696791] (3)[92:kswapd0]lowmemorykiller: Killing 'ssion.appupdate' (9323) (tgid 9323), adj 100,
11-30 11:08:04.222 <6>[10425.807027] (3)[92:kswapd0]lowmemorykiller: Killing 'android.smspush' (9561) (tgid 9561), adj 100,
11-30 11:08:04.370 <6>[10425.955053] (1)[92:kswapd0]lowmemorykiller: Killing 'MainThread-UE4' (18741) (tgid 18741), adj 0,

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村里小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值