From dbcbbc6bed62094695526fd27e56e74c2f275739 Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Fri, 21 Feb 2020 14:01:54 +0800 Subject: [PATCH] Create Low Memory Killer.md --- .../Low Memory Killer.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 blogs/Android/Framework/深入理解 Android 内核设计思想/Low Memory Killer.md diff --git a/blogs/Android/Framework/深入理解 Android 内核设计思想/Low Memory Killer.md b/blogs/Android/Framework/深入理解 Android 内核设计思想/Low Memory Killer.md new file mode 100644 index 0000000..6c5a9d2 --- /dev/null +++ b/blogs/Android/Framework/深入理解 Android 内核设计思想/Low Memory Killer.md @@ -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/\/oom_adj 中。根据这一权重值以及上面所提及的若干其他因素,系统会实时给每个进程评分,以决定 OOM 时应该杀死哪些进程。比如 oom_score 分数越低的进程,被杀死的概率越小,或者说被杀死的时间越晚。 + +这个值存储在 /proc/\/oom_score 中。 \ No newline at end of file