parent
c83269b9d2
commit
dbcbbc6bed
@ -0,0 +1,21 @@ |
|||||||
|
--- |
||||||
|
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 中。 |
Loading…
Reference in new issue