我们正在进行一项我们知道的工作,有时会过度地挤压内存。 然而,这导致杀死一到两个进程,我们希望成为在这种情况下死亡的最后一个进程。 我们如何告诉linux,请不要杀死pid XXXX和pid YYY,并且首先杀死其他作业,包括那个占用所有CPU的作业(如果有必要的话),因为那个作业(我们正在运行的作业)的生存优先级低于两个其他进程。
基本上我们正在用我们的cassandra数据库运行map / reduce作业,而linux正在决定杀死cassandra而不是杀死map / reduce任务(这是理想的,因为它们内置了恢复function,并且也可以是黑名单任务)。
您可以设置OOM杀手终止的进程的优先级。
给一个进程一个消极的oom_adj值,使它很less被杀害:
echo -15 > /proc/2592/oom_adj
给它一个正面价值使它更可能被杀害:
echo 10 > /proc/2592/oom_adj
将上述命令中的2592replace为您要保护和/或牺牲的进程的实际PID。
您可以:
echo -18 > /proc/$PID/oom_adj
希望这可以帮助
如果你想让触发OOM的进程死掉,只需设置适当的sysctl :
vm.oom_kill_allocating_task=1