美文网首页Android知识
lowmemorykiller内核回收机制注册、回调

lowmemorykiller内核回收机制注册、回调

作者: xiabodan | 来源:发表于2017-11-22 17:18 被阅读77次

    LMK

    分为三个进程

    • AMS 中设置lmk的6个内存阈值,以及更新每个进程/线程的adj值applyOomAdjLocked
    • lmkd是个单独的进程,socket监听,AMS发来的请求,更新内核的参数
    • lowmemorykiller在内核中注册shrinker,利用内核的内存回收机制,根据lmkd中设置的参数执行lmk,先杀6个阈值中最大的(当内存低于80640个page时(320M),杀高于906的进程),依次递进
    18432 23040 27648 32256 55296 80640
    0 100 200 300 900 906

    shrinker

    LMK驱动通过注册shrinker来实现的,shrinker是linux kernel标准的回收内存page的机制,由内核线程kswapd负责监控。

    当内存不足时kswapd线程会遍历一张shrinker链表,并回调已注册的shrinker函数来回收内存page,kswapd还会周期性唤醒来执行内存操作。每个zone维护active_list和inactive_list链表,内核根据页面活动状态将page在这两个链表之间移动,最终通过shrink_slab和shrink_zone来回收内存页,有兴趣想进一步了解linux内存回收机制,可自行研究,这里再回到LowMemoryKiller的过程分析。

    相关文章

      网友评论

        本文标题:lowmemorykiller内核回收机制注册、回调

        本文链接:https://www.haomeiwen.com/subject/jkdovxtx.html