--- Low Memory Killer 机制 --- #### 引言 熟悉 Linux 的开发人员应该知道,底层内核有自己的内存监控机制,即 OOMKiller。一旦发现系统的可用内存达到临界值,这个 OOM 的管理者就会自动跳出来 “收拾残局”。根据策略的不同,OOM 的处理手段略有差异,不过它的核心思想始终是: 按照优先级顺序,从低到高逐步杀掉进程,回收内存。 优先级的设定策略一方面要考虑对系统的损害程度,另一方面也希望尽可能的多释放无用内存。根据经验,一个合理的策略至少要综合以下几个因素: 1. 进程消耗的内存 2. 进程占用的 CPU 时间 3. Oom_adj(OOM 权重) #### OOM Killer 我们先来了解下 Linux Kernel 中的 OOM Killer。内核所管理的进程都有一个衡量其 oom 权重的值,存储在 /proc/\/oom_adj 中。根据这一权重值以及上面所提及的若干其他因素,系统会实时给每个进程评分,以决定 OOM 时应该杀死哪些进程。比如 oom_score 分数越低的进程,被杀死的概率越小,或者说被杀死的时间越晚。 这个值存储在 /proc/\/oom_score 中。