在Linux内核中,Low Memory Killer(LMK)、kswapd和OOM Killer(OOM)的作用顺序大致如下:
kswapd:
kswapd是内核的一个线程,用于在系统内存紧张时回收页框。当系统内存不足时,kswapd会根据一定的算法选择一些不常用的页面进行回收,以释放内存。虽然kswapd是在"low"到"min"的这段区间被唤醒加入调度队列的,但当它真正执行的时候,空余内存的值可能已经掉到"min"以下了。可见,"min"值存在的一个意义是保证像kswapd这样的特殊任务能够在需要的时候立刻获得所需内存。
Low Memory Killer (LMK):
当系统内存进一步紧张时(由PSI检测内存压力),低内存杀手(Low Memory Killer)会介入。LMK的作用是更精细地管理内存,选择一些不重要的进程(由AMS对进程进行重要性打分)进行终止,以释放更多的内存。LMK的运行机制基于优先级和策略,它会选择优先级最低的进程进行终止。
OOM Killer (OOM):
如果系统内存仍然不足,那么OOM Killer(Out of Memory Killer)将会被触发。OOM Killer的作用是终止一些进程以释放足够的内存,从而避免系统完全崩溃。在选择要终止的进程时,OOM Killer会考虑进程的优先级、是否为守护进程等因素。
综上,kswapd、LM