Evitar que o Ubuntu congele, mesmo se a memória do sistema estiver baixa

9

Às vezes, trabalho com grandes volumes de dados que quero manter na memória para processamento. Às vezes, eu calculo mal a quantidade de memória que meu programa produzirá, ou um depurador multiplica o uso de memória por um fator que excede minha memória disponível.

Sempre que eu começo um processo que requer memória, isso é o que eu esperaria de um sistema operacional saudável: tente consumir toda a memória livre, então peça a alguns outros processos não-essenciais bem para abrir mão de alguma memória que não precisa, então escreva para trocar.

Aqui está o que o Ubuntu faz para mim: coma toda a memória livre, então peça ao sistema operacional para trocar todos os serviços essenciais (sessão gnome, terminal, teclado), então congele e espere que eu puxe o plugue.

Duas perguntas:

  1. Como um sistema operacional pode presumir que algo pode ser tão importante que seja ok parar de escutar a entrada do usuário?
  2. Como posso dizer ao Ubuntu para nunca trocar serviços essenciais e sempre reagir à entrada do usuário, mesmo que algum processo estúpido tente consumir mais recursos do que o sistema fornece.
por Klamann 01.09.2016 / 14:07

4 respostas

1

Ainda não tenho uma solução para o problema, mas posso oferecer duas soluções alternativas que podem ser de interesse para os outros:

1) earlyoom

Esse é um serviço que observa o uso de memória e mata o processo que consome mais memória quando um determinado limite é atingido (consulte também este e esta pergunta sobre o killer da OOM no kernel do linux)

Eu testei com um processo de demonstração que solicita indefinidamente memória em pequenos pedaços. Aqui está minha primeira impressão: Quando eu começo o processo desonesto, ele rapidamente consome toda a minha memória RAM. Em seguida, a troca começa, o sistema torna-se irresponsivo. Alguns segundos depois, o sistema está de volta online. O log de earlyoom mostra que ele matou o processo de consumo de memória após o uso da memória e do swap atingir 90%.

Ainda há o atraso irritante quando a troca inicia e depois que o processo foi eliminado, algumas partes de outros processos geralmente permanecem na troca até que sejam solicitadas, mas é um começo.

2) apenas desabilite o swap

Eu sei que este é um tópico polêmico , mas com a finalidade de sistemas de desktop e especialmente de máquinas de desenvolvimento em que pode acontecer de tempos em tempos que um processo tente consumir toda a sua memória, faz sentido: Sem swap, o killer da OOM simplesmente funciona como planejado. Quando você fica sem memória, ele encontra o melhor processo para matar e se livrar dele. Sem atraso, sem atraso.

Você pode desabilitar o swap para a sessão atual com sudo swapoff -a ou tornando a alteração permanente .

A solução adequada para o problema seria, claro, que o sistema permaneça responsivo quando a memória principal estiver esgotada e começar a trocar memória como se não houvesse amanhã, mas isso não parece estar acontecendo tão cedo.

    
por Klamann 29.09.2017 / 21:59
0

O Ubuntu 16.04 vem com a versão 4.4 do kernel. No Kernel versão 4.6, o killer da OOM (Out of Memory Task Killer) teve uma grande reformulação para tratar de reclamações como a sua. A versão 4.6 do kernel está no final da vida e a versão 4.7.2 do Ubuntu Kernel atual está no site. Ele corrige muitos outros problemas além de atualizar o módulo oom_reaper.

Eu fiz um teste na semana passada preenchendo RAM + SWAP e a entrada permaneceu estável. Eu também tinha permissão para alternar entre janelas ativas com apenas atraso de minisula. Eu não poderia invocar novos processos como 'alt' + 'print screen', mas poderia invocar um desligamento ordenado.

    
por WinEunuuchs2Unix 01.09.2016 / 16:55
0

Experimente uma de duas coisas:

1) altere a configuração do swappiness de sua configuração padrão de 60 para 10, ie: adicione vm.swappiness = 10 para /etc/sysctl.conf (em terminal, digite sudo gedit /etc/sysctl.conf ), depois reinicialize o sistema. Pesquise aqui por swappiness para mais informações sobre isso.

2) Se o swappiness não ajudar ... mesmo que você não queira ... aumentar o tamanho do seu swapfile para 1.5x16G e ver se isso ajuda.

Mantenha-me informado. Felicidades, Al

    
por heynnema 06.09.2016 / 00:27
0

Eu resolvi um problema semelhante. Eu não sei se minha experiência talvez seja adequada para você ...

Recentemente eu publiquei um guia sobre como instalar o Linux em dispositivos LVM de loopback que iniciam a partir de USB (assim, sem ter que instalar o grub no disco interno, deixando-o como original). Aqui está o guia: link .

Então eu caí no problema de congelamento em alta carga de memória e observei um uso de espaço de troca anormal (toda a RAM consumida e o uso de swap próximo de zero). Obviamente, a partição swap do LVM foi montada e funcionando corretamente, mas não sei por que o kernel não a usou como esperado.

Eu tentei uma solução alternativa. Eu criei um arquivo de loopback de swap (não LVM) e o congelamento desapareceu. Agora o arquivo de troca é usado como seria, e o sistema operacional nunca congela!

Consulte o link para obter informações mais detalhadas.

    
por Antonio Petricca 30.03.2018 / 14:46

Tags