You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

1.2 KiB

Low Memory Killer 机制

引言

熟悉 Linux 的开发人员应该知道,底层内核有自己的内存监控机制,即 OOMKiller。一旦发现系统的可用内存达到临界值,这个 OOM 的管理者就会自动跳出来 “收拾残局”。根据策略的不同,OOM 的处理手段略有差异,不过它的核心思想始终是:

按照优先级顺序,从低到高逐步杀掉进程,回收内存。

优先级的设定策略一方面要考虑对系统的损害程度,另一方面也希望尽可能的多释放无用内存。根据经验,一个合理的策略至少要综合以下几个因素:

  1. 进程消耗的内存
  2. 进程占用的 CPU 时间
  3. Oom_adj(OOM 权重)

OOM Killer

我们先来了解下 Linux Kernel 中的 OOM Killer。内核所管理的进程都有一个衡量其 oom 权重的值,存储在 /proc/<PID>/oom_adj 中。根据这一权重值以及上面所提及的若干其他因素,系统会实时给每个进程评分,以决定 OOM 时应该杀死哪些进程。比如 oom_score 分数越低的进程,被杀死的概率越小,或者说被杀死的时间越晚。

这个值存储在 /proc/<PID>/oom_score 中。