如何使用 oom_score_adj?

bma*_*ies 31 process memory-usage

在 11.04 上,/proc/[pid]包含oom_score_adj,但man proc描述了旧的oom_adj. 我在谷歌上搜索了有关如何使用它的任何信息,但没有成功。

我需要安排的是由“pbs”或“gridengine”启动的进程在其他任何东西被杀死之前被杀死。我怎样才能做到这一点?

ger*_*ijk 19

基于我自己在 Unix&Linux 上对类似问题的问答。

正如斯图尔特在他的回答中很好地指出的那样,有效值为 -1000 到 1000 范围内的整数oom_score_adj。在较低的值时,降低的是它会被杀死的机会。

一旦重新启动应用程序,必须一遍又一遍地更改此值非常不方便。在进程终止后,信息就会丢失。Upstart(Ubuntu 中的 init 守护进程)有一个很好的选项来配置守护进程,以确保它在(重新)启动时被设置:

oom score

[...] 剪 [...]

例子:

# this application is a "resource hog"
oom score 1000

expect daemon
respawn
exec /usr/bin/leaky-app
Run Code Online (Sandbox Code Playgroud)

因此,基本上,您可以编辑/etc/init/myservice.conf要更改的服务的配置文件,以包含一行oom score -1000. 我确实假设您在问题中谈论的服务 'pbs' 或 'gridengine' 已启用 Upstart,否则您将需要另一种方法来永久更改此设置。


Fre*_*ord 12

我们现在有来自util-linux 的coom显示和调整 OOM-killer 分数):

choom --adjust -100 myprogram
Run Code Online (Sandbox Code Playgroud)

手册有更多信息。


use*_*062 11

如果您可以修改生成要为 oom-killer 优先处理的进程的启动脚本,请将以下内容添加到启动脚本中:

echo 1000 > /proc/self/oom_score_adj
Run Code Online (Sandbox Code Playgroud)

该值是为子进程继承的。


小智 9

如果您为 oom_adj 或 oom_score_adj 设置了高(ish)值,那么它们将首先被杀死。例如

echo 15 > /proc/[pid]/oom_adj
Run Code Online (Sandbox Code Playgroud)

oom_adj 从 -16 到 15,如上所述 oom_score_adj 接受 -1000 到 1000

  • 实际上,你可以*增加**你的*进程的分数,而无需root(“是的,这可能会被oom杀死”)。减少(低于 0)需要 root。 (2认同)

uli*_*tko 7

这是一个老问题了。在最近的系统中使用systemd,这再简单不过了。

\n

根据您的喜好,export EDITOR=vim或者其他什么,然后:

\n
systemctl edit mysql.service\n
Run Code Online (Sandbox Code Playgroud)\n

并输入两行:

\n
[Service]\nOOMScoreAdjust=-150\n
Run Code Online (Sandbox Code Playgroud)\n

保存并退出;永久完成\xe2\x80\x94。

\n
\n

如果您对配置插入systemctl edit --full的概念感到困惑,请使用(请小心避免写入,因为您的编辑将在更新时被破坏)。/usr/lib/systemd/system/*.service

\n
\n

文档:man systemd.exec

\n
\n

OOMScore调整=

\n

设置已执行进程的内存不足终止程序的调整级别。取 -1000(以禁用此进程的 OOM 终止)和 1000(以在内存压力下很有可能终止此进程)之间的整数。详细信息请参见 proc.txt[1]。

\n
\n


fal*_*aff 5

查看代码总是一个好主意。通常我使用kernel.org 的搜索功能,但它目前已关闭。Github 也做得很好。我找到了这个:

相反,添加了一个新的可调参数 /proc/pid/oom_score_adj,范围从 -1000 到 +1000。它可用于使启发式两极分化,这样某些任务从不考虑 oom kill,而其他任务可能总是被考虑。该值直接添加到 badness() 分数中,例如,-500 的值意味着与系统上、绑定到 mempolicy、cpuset 中的其他任务相比,将其内存消耗的 50% 打折扣,或者共享同一个内存控制器。

来自https://github.com/mirrors/linux-2.6/commit/a63d83f427fbce97a6cea0db2e64b0eb8435cd10#include/linux/oom.h