启动Android低内存杀手的时机

时间:2013-09-24 03:40:10

标签: android

众所周知,低记忆杀手在固定时间开始。 “固定时间”有多长?配置它的代码在哪里?

2 个答案:

答案 0 :(得分:10)

Android LMK在某个特定时间没有开始释放内存,但它取决于minfree值:

 /sys/module/lowmemorykiller/parameters/minfree

例如,如果cat /sys/module/lowmemorykiller/parameters/minfree具有以下值:

1536,2048,4096,5120,5632,6144

然后,这意味着这些值是用于开始杀死这些特定类型进程的阈值内存。

FOREGROUND_APP:1536 
VISIBLE_APP:2048
SECONDARY_SERVER:4096
HIDDEN_APP:5120
CONTENT_PROVIDER:5632
EMPTY_APP:6144

例如,当系统中的空闲内存(RAM)小于(6144 * 4/1024)= 24 MB时,LMK将开始终止EMPTY_APP进程。同样地,如果仍然存储条件没有改善,它将开始在EMPTY_APP->CONTENT_PROVIDER->....->FOREGROUND_APP中杀死进程(最后被杀死,这应该永远不会发生)。

答案 1 :(得分:0)

在异步情况下,LMK由内核pageout守护进程(kswapd)定时。所以我想你可以更深入地了解kswapd控制流程,以确定它的唤醒时间是否有限,这将为你提出关于时间约束的问题的部分答案。

也可以在kswapd上下文之外调用LMK收缩器回调。当系统执行直接同步页面回收(参见.mm / page_alloc.c)

时,会发生这种情况

参考说明:

  1. http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html
  2. 相关SO问题/答案

    1. Q:how-to-change-the-linux-kernel-swap-daemon-kswapd-timeout
    2. A:how-to-change-the-linux-kernel-swap-daemon-kswapd-timeout