直接设置echo 1000 >/proc/<pid>/oom_score_adj
是不可靠的,因为目标程序已经在运行,这种情况下可能是目标程序之前导致了OOMecho 1000 >/proc/<pid>/oom_score_adj
答案1
oom_score_adj
在 fork 上继承,因此您可以通过在父进程上设置所需的值来为新子进程设置其初始值。
因此,如果您从 shell 脚本启动目标,
echo 1000 > /proc/$$/oom_score_adj
会将 shell 的值更改为 1000,并且 shell 随后分叉的任何进程都将从oom_score_adj
设置为 1000 开始。
答案2
作为在父进程上设置它的另一种方法,如 M. Kitt 的回答所示,可以在分叉后在子进程上设置它,方法是通过链式加载工具在子进程中运行程序,该工具将设置强加于自身并然后简单地链式加载目标程序。
我在 2016 年为 nosh 工具集编写了一个这样的实用程序,它了解 Linux 操作系统和 FreeBSD/TrueOS 的机制。
oom-kill-protect -- 1000目标程序一些参数
--
当有人决定调整它以使用负 OOM 分数时,就会出现此情况。☺
进一步阅读
- 乔纳森·德博因·波拉德 (2016)。
oom-kill-protect
。诺什工具集。软件。 - 乔纳森·德·博因·波拉德 (2016-01-31)。具有 OOM Killer 保护的 syslogd(8)。 FreeBSD 黑客。