Linux内核处理低内存条件

时间:2013-04-02 06:27:03

标签: android linux memory-management low-memory

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

我们怎样才能证明新内核能够很好地处理低内存条件?

是否有相同的标准测试?

1 个答案:

答案 0 :(得分: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)< / p>

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

内存不足的标准测试可在LTP Source Forge

Linux Test Project (LTP)中找到

测试可在ltp / testcases / kernel / mem / oom

中找到