Você pode ajustar o assassino da OOM para preferir certos processos. Cada processo tem uma pontuação que indica a probabilidade de o processo ser eliminado caso o sistema seja executado em situação de OOM. Você pode ver a pontuação de um processo em /proc/${PID}/oom_score
. Você pode influenciar a decisão do assassino da OOM usando /proc/${PID}/oom_adj
: um valor alto aumenta a probabilidade de que o assassino da OOM mate $ {PID}. O valor de oom_adj
é herdado por filhos, portanto, basta configurá-lo no processo mestre do apache na inicialização (nesse caso, você deve hava um watchdog que reinicia o apache); Uma alternativa é deixar o processo mestre em seu nível padrão e ajustar cada filho para que o mestre permaneça ativo e reproduza novamente os filhos conforme necessário (nesse caso, você precisa de um daemon externo que verifique novos filhos e ajuste oom_adj
). É claro que isso pressupõe que você esteja usando o multiprocessador; -)
Por favor, note que o intervalo normal de valores de oom_adj
(-16,15) é apenas um viés, a heurística do assassino de OOM ainda pode escolher outro processo se sua pontuação for alta o suficiente. O valor especial -17 torna o processo inutilizável pelo killer da OOM, mas é perigoso, porque se o processo não-faturável (por exemplo, seu banco de dados) ficar frenético, o kernel pode ser incapaz de se recuperar da falta de memória.