Como dou os dentes assassinos do OOM novamente?

12

Naquela época, eu amaldiçoava o assassino de OOM por ser agressivo demais e matar os aplicativos que estava usando. Agora, enquanto assisto periodicamente meu sistema agitar por 15 minutos por causa de algum programa mal-comportado e, finalmente, recorro a um desligamento forçado porque ele não responde ao teclado, percebo que o tive melhor do que imaginava naquela época.

Como restauro o assassino de OOM às suas formas antigas e sedentas de sangue?

Avdi
fonte
1
Dê uma olhada nos programas causando um problema, e limitar a quantidade de memória que pode sugar acima comlimits.conf
LawrenceC

Respostas:

4

Eu diminuiria a quantidade de espaço de troca disponível. Atualmente, as instalações típicas tentam alocar o máximo de trocas possível com a memória física (ou às vezes duas vezes mais). O problema com isso é que quando algo dá errado, o sistema entra em uma espiral da morte de tentar "embaralhar" as coisas da memória para o disco, e para trás, e ele começa a fazer assim muito do que ele não tem tempo para responder para entrada do usuário.

Nos bons dias, processos inteiros eram trocados para o disco (e vice-versa), portanto, grandes trocas eram necessárias.

Nos sistemas modernos de memória virtual, a memória é trocada em blocos (em vez de processos inteiros), para que você possa conviver com pequenos swaps. No seu cenário, seria melhor ter processos mortos, portanto, executar com troca menor fará com que o OOM inicie os processos mais rapidamente (em vez de fazer com que o sistema gaste quantidades excessivas de tempo trocando itens de / para o disco).

Brian Stevens
fonte
Eu tenho troca zero, e meu sistema trava por mais de 20 minutos quando eu tenho um loop javascript infinito no cromo que empurra para uma matriz ou algo assim. Preciso ativar o OOMK antes que meu sistema seja inútil, não muito depois.
JasonWoof
0

Aqui está o que funcionou para mim:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Isso é apenas para esta bota. Você pode testar executando o seguinte na guia console do inspetor do seu navegador:

a = []; while (true) { a.push(1); }

Se você estiver satisfeito com essa configuração, poderá definir o padrão para todas as futuras botas:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
JasonWoof
fonte