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 守护进程)有一个很好的选项来配置守护进程,以确保它在(重新)启动时被设置:
[...] 剪 [...]
例子:
Run Code Online (Sandbox Code Playgroud)# 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,否则您将需要另一种方法来永久更改此设置。
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
这是一个老问题了。在最近的系统中使用systemd,这再简单不过了。
\n根据您的喜好,export EDITOR=vim或者其他什么,然后:
systemctl edit mysql.service\nRun Code Online (Sandbox Code Playgroud)\n并输入两行:
\n[Service]\nOOMScoreAdjust=-150\nRun Code Online (Sandbox Code Playgroud)\n保存并退出;永久完成\xe2\x80\x94。
\n如果您对配置插入systemctl edit --full的概念感到困惑,请使用(请小心避免写入,因为您的编辑将在更新时被破坏)。/usr/lib/systemd/system/*.service
\n\nOOMScore调整=
\n设置已执行进程的内存不足终止程序的调整级别。取 -1000(以禁用此进程的 OOM 终止)和 1000(以在内存压力下很有可能终止此进程)之间的整数。详细信息请参见 proc.txt[1]。
\n
查看代码总是一个好主意。通常我使用kernel.org 的搜索功能,但它目前已关闭。Github 也做得很好。我找到了这个:
相反,添加了一个新的可调参数 /proc/pid/oom_score_adj,范围从 -1000 到 +1000。它可用于使启发式两极分化,这样某些任务从不考虑 oom kill,而其他任务可能总是被考虑。该值直接添加到 badness() 分数中,例如,-500 的值意味着与系统上、绑定到 mempolicy、cpuset 中的其他任务相比,将其内存消耗的 50% 打折扣,或者共享同一个内存控制器。