我们正在运行一个作业,我们知道它有时会过度挤压内存。然而,这会导致杀死一个或两个进程,我们希望这些进程是在这种情况下最后被杀死的进程。我们如何告诉 Linux,请不要杀死 pid XXXX 和 pid YYY,并首先杀死其他作业,包括占用所有 CPU 的作业(如果必要的话),因为该作业(我们正在运行的作业)的生存优先级低于其他两个进程。
基本上,我们正在使用我们的 cassandra 数据库运行 map/reduce 作业,并且 linux 决定终止 cassandra 而不是终止 map/reduce 任务(这将是理想的,因为它们具有内置恢复功能并且也可以将任务列入黑名单)。
答案1
您可以设置 OOM Killer 将终止的进程的优先级。
赋予进程一个负的 oom_adj 值,以减少其被杀死的可能性:
echo -15 > /proc/2592/oom_adj
赋予它一个正值以使其更有可能被杀死:
echo 10 > /proc/2592/oom_adj
将上述命令中的 2592 替换为您要保护和/或牺牲的进程的实际 PID。
答案2
你可以:
echo -18 > /proc/$PID/oom_adj
希望这可以帮助
答案3
如果您希望触发 OOM 的进程终止,只需设置适当的值sysctl
:
vm.oom_kill_allocating_task=1