看着Google,找不到任何解释proc/<pid>/oom_score分数如何计算的东西。 为什么使用这个分数而不是仅仅使用总的内存?
请参阅Goldwyn Rodrigues 2009年的文章 ,Jonathan Corbet 2010年发表的文章 ,以及Jonathan Corbet 2013年关于未来变化的文章 。
从2010年的文章:
在David的补丁集中,旧的badness()启发式algorithm几乎完全没有了。 相反,计算变成了一个简单的问题,即进程正在使用可用内存的百分比。 如果整个系统的内存不足,则“可用内存”是系统可用的所有RAM和交换空间的总和。 相反,如果OOM情况是由于耗尽了给定cpuset / control组的内存而导致的,那么“可用内存”就是分配给该控制组的总量。 如果超过了内存策略的限制,则进行类似的计算。 在每种情况下,进程的内存使用被认为是它的驻留集合(它使用的RAM页的数量)和它的交换使用的总和。
这个计算结果产生了百分之十的数字; 使用可用内存的每个字节的过程将具有1000的分数,而根本不使用存储器的过程将得分为零。 这个分数的启发式调整很less,但是代码仍然会从根拥有的进程的分数中减去一小部分(30),因为它们比用户拥有的进程稍微有价值。
另一个应用是调整存储在每个进程的oom_score_adjvariables中的值,可以通过/ proc进行调整。 这个旋钮允许调整每个过程对用户空间中的OOM杀手的吸引力; 将其设置为-1000将完全禁用OOM杀死,而设置为+1000相当于在相关进程上绘制大型目标。