Linux内核处理低内存条件

Hap*_*ppy 2 linux android memory-management low-memory

Linux内核如何处理低内存条件?

我们如何证明新内核能够很好地处理低内存条件?

是否有相同的标准测试?

Har*_*K V 9

Linux内核使用OOM(Out Of Memory) Killer.处理低内存条件.OOM杀手的策略是杀死一些进程或进程以允许分配进程获得它所需的内存.

为了选择要杀死的进程,OOM杀手计算名为的值Badness.然后它选择具有要杀死的最大Badness的进程.如果选择了分配过程,OOM将终止其工作.如果选择了其他一些进程,可以多次调用OOM杀手,以防OOM杀手的上一次运行没有释放足够的内存.

要杀死的过程是这样选择的

  • 根进程没有被杀死.
  • 我们失去了最低限度的工作量.
  • 我们恢复了大量的内存.
  • 我们希望杀死最少量的进程(一个).
  • 我们试图杀死用户期望我们杀死的进程,这个算法已经过精心调整,以满足最少惊喜的原则.

我们可以使用该/proc/sys/vm/overcommit_memory值配置OOM杀手

0-Heuristic memory overcommit(默认设置) - 拒绝地址空间的明显过度使用

1 - 总是过度使用

2 - 禁用overcommit - 当overcommit_memory设置为2时,系统的总地址空间提交不允许超过物理RAM的swap +可配置百分比(overcommit_ratio -default为50)

证明linux处理OOM的一种简单方法是通过malloc连续分配内存并对内存进行memset,直到进程耗尽内存并被终止(出现在dmesg中).

Linux Test Project (LTP)可以在LTP Source Forge找到Out Of Memory的标准测试

测试在ltp/testcases/kernel/mem/oom中提供