内核oom得分如何计算?


12

在Google上查看时,找不到任何解释得分proc/<pid>/oom_score计算方式的信息。为什么要使用此分数而不是仅使用已使用的总内存?

Answers:


18

请参阅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则等同于在关联的进程上绘制大型目标。


是否所有进程的oom得分都为0?当前,从活动CD引导会导致此情况。
CMCDragonkai 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.