在 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)有一个不错的选项,用于配置守护进程,以确保每次(重新)启动时都设置该值:
[...] 剪辑 [...]
例子:
# 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
答案4
这是一个老问题了。systemd在最近的系统中,这再简单不过了。
无论您喜欢export EDITOR=vim
什么,然后:
systemctl edit mysql.service
并输入两行:
[Service]
OOMScoreAdjust=-150
保存并退出;完成——永久完成。
systemctl edit --full
如果你对以下概念感到困惑,请使用配置插件(请小心避免写入,/usr/lib/systemd/system/*.service
因为您的编辑将在更新时被破坏)。
OOMScoreAdjust=
设置针对已执行进程的内存不足终止程序的调整级别。取一个介于 -1000 (禁止针对该进程的内存不足终止) 和 1000 (极有可能在内存压力下终止该进程) 之间的整数。有关详细信息,请参阅 proc.txt[1] 。