如何使用 oom_score_adj?

如何使用 oom_score_adj?

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

我需要安排的是,先终止由“pbs”或“gridengine”启动的进程,然后再终止其他进程。我该怎么做?

答案1

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

正如 Stuart 所指出的他的回答, 的有效值为 -1000 至 1000 范围内的整数oom_score_adj降低价值,降低它被杀死的可能性。

重新启动应用程序后,必须反复更改此值,这非常不方便。进程终止后,信息就会丢失。Upstart(2014 年之前是 Ubuntu 中的 init 守护进程,后来移至 systemd)有一个不错的选项,用于配置守护进程,以确保每次(重新)启动时都设置该值:

oom score

[...] 剪辑 [...]

例子:

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

expect daemon
respawn
exec /usr/bin/leaky-app

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

答案2

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

echo 1000 > /proc/self/oom_score_adj

该值会被子进程继承。

答案3

我们有乔姆现在,从util-linux显示和调整 OOM-killer 分数):

choom --adjust -100 myprogram

手册页有更多信息。

答案4

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

无论您喜欢export EDITOR=vim什么,然后:

systemctl edit mysql.service

并输入两行:

[Service]
OOMScoreAdjust=-150

保存并退出;完成——永久完成。


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


文件:man systemd.exec

OOMScoreAdjust=

设置针对已执行进程的内存不足终止程序的调整级别。取一个介于 -1000 (禁止针对该进程的内存不足终止) 和 1000 (极有可能在内存压力下终止该进程) 之间的整数。有关详细信息,请参阅 proc.txt[1] 。

相关内容