Answers:
请参阅Goldwyn Rodrigues于2009年发表的有关实施的文章,有关Jonathan Corbet于2010年发表的关于我认为当前行为的文章以及有关Jonathan Corbet于2013年发表的关于未来变化的想法的文章。
从2010年文章:
在David的补丁集中,旧的badness()启发式方法几乎完全消失了。取而代之的是,计算变成一个简单的问题,即进程正在使用多少百分比的可用内存。如果系统整体上内存不足,则“可用内存”是系统可用的所有RAM和交换空间的总和。相反,如果OOM情况是由于耗尽给定cpuset /控制组所允许的内存而引起的,则“可用内存”是分配给该控制组的总量。如果超出了内存策略施加的限制,则会进行类似的计算。在每种情况下,该进程对内存的使用被视为其驻留集(它正在使用的RAM页数)与其交换使用之和。
该计算结果是百分之十的数字。一个使用可用内存的每个字节的进程的得分为1000,而完全不使用内存的进程的得分为零。对该分数的启发式调整很少,但是代码仍然会从根拥有的流程的分数中减去一小部分(30),因为它们比用户拥有的流程更有价值。
应用的另一项调整是添加存储在每个进程的oom_score_adj变量中的值,可以通过/ proc对其进行调整。该旋钮允许调整每个过程对用户空间中OOM杀手的吸引力。将其设置为-1000将完全禁用OOM杀死功能,而将其设置为+1000则等同于在关联的进程上绘制大型目标。