【发布时间】:2013-09-24 03:40:10
【问题描述】:
众所周知,低内存杀手在固定时间开始。 “固定时间”有多长?配置这个的代码在哪里?
【问题讨论】:
-
您的问题不清楚。可以在您的问题中添加一些额外的信息。
标签: android
众所周知,低内存杀手在固定时间开始。 “固定时间”有多长?配置这个的代码在哪里?
【问题讨论】:
标签: android
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 中开始杀死进程(最后被杀死,这不应该发生)。
【讨论】:
在异步情况下,LMK 由内核页面输出守护进程 (kswapd) 计时。因此,我想您可以更深入地研究 kswapd 控制流程,以确定它的唤醒时间是否有界,这将为您关于时间约束的问题提供部分答案。
LMK 收缩器回调也可以在 kswapd 上下文之外调用。当系统执行直接同步页面回收时会发生这种情况(参见.mm/page_alloc.c)
参考说明:
相关 SO 问题/答案
【讨论】: