2

Linux 内核如何处理内存不足的情况?

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

有没有相同的标准测试?

4

1 回答 1

9

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

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

要杀死的进程的选择方式是

  • 根进程没有被杀死。
  • 我们失去了完成的最少工作量。
  • 我们恢复了大量的内存。
  • 我们想杀死最少数量的进程(一个)。
  • 我们试图杀死用户希望我们杀死的进程,这个算法已经过精心调整,以满足最小意外的原则。

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

0-启发式内存过度使用(默认设置)-地址空间的明显过度使用被拒绝

1-总是过度使用

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

证明 linux 处理 OOM 的一个简单方法是通过 malloc 不断分配内存并 memset 内存,直到进程耗尽内存并被杀死(出现在 dmesg 中)。

内存不足的标准测试可以Linux Test Project (LTP)LTP Source Forge中找到

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

于 2013-04-02T07:33:05.977 回答