Como evito que o Linux congele quando falta memória?

20

Hoje eu (acidentalmente) rodei algum programa na minha caixa Linux que rapidamente usou muita memória. Meu sistema congelou, ficou sem resposta e, portanto, eu era incapaz de matar o infrator.

Como posso evitar isso no futuro? Não pode, pelo menos, manter um núcleo responsivo ou algo em execução?

    
por johv 19.05.2012 / 12:38

5 respostas

13

Aposto que o sistema na verdade não "congelou" (no sentido de que o kernel estava travado), mas apenas não respondia. As chances são de estar apenas trocando muito, fazendo com que o desempenho interativo e o rendimento do sistema caiam como uma pedra.

Você poderia desativar o swap, mas isso apenas altera o problema de desempenho ruim para processos eliminados por OOM (e toda a diversão que isso causa), juntamente com desempenho reduzido devido ao cache de disco menos disponível.

Como alternativa, você pode usar limites de recursos por processo (normalmente chamados de rlimit e / ou ulimit ) para remover a possibilidade de um único processo, levando uma quantidade ridícula de memória e causando a troca, mas isso simplesmente avança você entreter território 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 uso massivo de memória, provavelmente poderia escrever um programa que fizesse um mlockall() e, em seguida, executasse seu shell; que o manteria na memória e seria a coisa mais próxima de "manter um núcleo responsivo" que você provavelmente obteria (porque não é que a CPU esteja sendo superutilizada, é esse o problema).

Pessoalmente, eu assino o método "não faça coisas estúpidas" de controle de recursos. Se você tem root, você pode causar todo tipo de dano a um sistema, e fazer qualquer coisa que você não conheça os resultados prováveis é um negócio arriscado.

    
por 19.05.2012 / 12:54
6

Como mencionado acima no comentário de Tronic, é possível chamar OOM-killer (killer de memória insuficiente) diretamente pela combinação de teclado SysRq - F .

A chave

SysRq é geralmente combinada dentro da tecla PrtSc nos teclados.

OOM-killer mata algum processo (-es) e o sistema torna-se responsivo novamente. Acesso direto ao OOM-killer pode não ser ativado por padrão, checkout esta pergunta para descobrir como para verificar seu status e / ou ativá-lo.

PS: Isso me ajudou muito. Eu concordo com a opinião de que este é o conselho mais útil sobre esse problema se for causado pelo Chrome ou qualquer outro software ganancioso de memória. Mas você precisa ter em mente que OOM-killer poderia matar algum processo realmente importante, use-o com cuidado.

    
por 30.03.2017 / 16:00
1

Este é um bug conhecido desde 2007 - veja Sistema congelado em alto uso de memória .

Nesta situação, o Windows exibe uma caixa de diálogo avisando o usuário para fechar um ou mais aplicativos.

    
por 15.06.2016 / 17:31
0

Se você sentir vontade de recompilar o kernel, você pode tentar o patch da seção EDIT desta pergunta: link
Ele não libera as páginas Active(file) durante alta pressão de memória e, portanto, permite que OOM-killer seja disparado quase instantaneamente porque o kernel não precisa mais gastar minutos de releitura constante do disco das páginas executáveis de cada processo causando congelamento OS.

    
por 31.08.2018 / 11:58
-1

Isso é algo particularmente difícil de evitar. É porque o kernel começa a trocar. Uma solução é desativar o swap. Quando o sistema fica sem memória, ao invés de iniciar a troca, o kernel irá matar alguns processos; geralmente ele pega o processo correto para matar, mas é melhor matar um processo aleatório do que ter um sistema que não responde.

Esta pode ser uma solução particularmente boa para servidores, porque os servidores geralmente têm RAM suficiente e quando eles começam a usar o espaço de troca, isso significa que algo está errado de qualquer maneira. No entanto, os desktops geralmente precisam do espaço de troca, então acho que não há uma boa solução para os desktops. Eu frequentemente coloco o espaço de troca em servidores, especialmente quando há suspeita de vazamento de memória.

    
por 19.05.2012 / 12:52

Tags