Linux内存不足,无法控制哪个程序死掉

我们正在进行一项我们知道的工作,有时会过度地挤压内存。 然而,这导致杀死一到两个进程,我们希望成为在这种情况下死亡的最后一个进程。 我们如何告诉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