在11.04中,/proc/[pid]
包含oom_score_adj
但man proc
描述了旧的oom_adj
。我没有在Google上搜索有关如何使用此功能的任何信息。
我需要安排的是,先杀死由“ pbs”或“ gridengine”启动的进程,然后再杀死其他任何事物。我怎样才能做到这一点?
在11.04中,/proc/[pid]
包含oom_score_adj
但man proc
描述了旧的oom_adj
。我没有在Google上搜索有关如何使用此功能的任何信息。
我需要安排的是,先杀死由“ pbs”或“ gridengine”启动的进程,然后再杀死其他任何事物。我怎样才能做到这一点?
Answers:
基于我对类似问题在Unix&Linux上的问答。
正如Stuart在回答中很好地指出的,有效值是-的-1000到1000范围内的整数oom_score_adj
。在较低的值时,降低的是它会被杀死的机会。
重新启动应用程序后,必须一遍又一遍地更改此值是非常不便的。该过程终止后,信息只会丢失。Upstart(Ubuntu中的init守护程序),有一个不错的选择,可以配置守护程序以确保它在重新启动时已设置:
[...]片段[...]
例:
# this application is a "resource hog" oom score 1000 expect daemon respawn exec /usr/bin/leaky-app
因此,基本上,您可以编辑/etc/init/myservice.conf
要更改的服务的配置文件,以包含line oom score -1000
。我确实假设您在问题中谈论的服务“ pbs”或“ gridengine”已启用Upstart,否则您将需要另一种永久更改此方法的方法。
如果您为oom_adj或oom_score_adj设置较高的(ish)值,则它们将首先被杀死。例如
echo 15 > /proc/[pid]/oom_adj
oom_adj从-16变为15,并且如上所述oom_score_adj接受-1000至1000
sudo sh -c "echo -1000 > /proc/[PID]/oom_score_adj"
查看代码始终是一个好主意。正常情况下,我使用kernel.org的搜索功能,但目前无法使用。Github也做得很好。我找到了这个:
而是添加了一个新的可调参数/ proc / pid / oom_score_adj,范围从-1000到+1000。它可以用来使启发式两极分化,以使某些任务永远不会被视为杀死oom,而其他任务却总是会被考虑。该值直接添加到badness()分数中,因此,例如,值-500意味着与系统上绑定到内存的内存中的其他任务相比,将其内存消耗的50%折价。共享相同的内存控制器。