Aposto que o sistema realmente não "congelou" (no sentido de que o kernel travou), mas não respondeu muito bem. As chances são de que ele estava apenas trocando muito, fazendo com que o desempenho interativo e a taxa de transferência do sistema caíssem como uma pedra.
Você pode desativar a troca, mas isso apenas altera o problema de baixo desempenho para processos eliminados pelo OOM (e toda a diversão que causa), juntamente com a diminuição do desempenho devido ao menor cache de disco disponível.
Como alternativa, você pode usar os limites de recursos por processo (geralmente chamados de rlimit
e / ou ulimit
) para remover a possibilidade de um único processo consumir uma quantidade ridícula de memória e causar trocas, mas isso apenas o leva a um território divertido com processos que morrem em momentos inconvenientes porque eles queriam um pouco mais de memória do que o sistema estava disposto a dar a eles.
Se você soubesse que faria algo que provavelmente causaria grande uso de memória, provavelmente poderia escrever um programa wrapper que mlockall()
executasse e executasse seu shell; isso a manteria na memória e seria a coisa mais próxima de "manter um núcleo responsivo" que você provavelmente obterá (porque não é que a CPU esteja sendo superutilizada, esse é o problema).
Pessoalmente, subscrevo o método de controle de recursos "não faça coisas estúpidas". Se você possui root, pode causar todos os tipos de danos a um sistema e, portanto, fazer qualquer coisa que não saiba os resultados prováveis é um negócio arriscado.