【问题标题】:The timing to start Android Low Memory killer启动 Android 低内存杀手的时机
【发布时间】:2013-09-24 03:40:10
【问题描述】:

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

【问题讨论】:

  • 您的问题不清楚。可以在您的问题中添加一些额外的信息。

标签: android


【解决方案1】:

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 中开始杀死进程(最后被杀死,这不应该发生)。

【讨论】:

  • 我在屏幕上激活了一个后台粘性服务(使用 SYSTEM_WINDOW_ALERT),LMK 被杀死并在 48 秒后启动。有没有办法设置高优先级?该服务作为 /system/priv-app/ 下的核心应用程序运行
  • 我认为更好的方法是修复你的服务的内存占用......尝试检查它消耗了多少内存......
【解决方案2】:

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

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

参考说明:

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

相关 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2012-06-16
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多