3

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

4

2 回答 2

11

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(最后被杀死,这永远不会发生)。

于 2014-01-15T09:57:10.130 回答
0

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

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

参考说明:

  1. http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html

相关的 SO 问题/答案

  1. 问:如何更改-linux-kernel-swap-daemon-kswapd-timeout
  2. A:如何更改-Linux-内核-交换-守护进程-kswapd-超时
于 2014-01-24T21:59:32.673 回答