Situações OOM tratadas horrivelmente - melhor desativar o swap?

0

Estou executando o Ubuntu 16.04.1 LTS, com um kernel 4.4.0-36. Eu não acho que isso importe muito, porque eu vi um comportamento terrível do kernel em muitas distribuições / versões do kernel.

Considere o seguinte ponto de partida:

  • O meu sistema tem digamos 4 GB de memória e uma partição swap de 4 GB.
  • Estou executando um ambiente de área de trabalho com o GNOME, um navegador e um IDE atualmente abertos.
  • Estou fazendo alguma programação e, no decorrer disso, introduzo um bug que faz com que meu programa aloque uma quantidade infinita de memória.

Até aí tudo bem, esta é uma situação que eu deveria me recuperar, certo? Aqui está o que eu quero que aconteça:

  1. Meu sistema operacional percebe que o programa que eu escrevi é desonesto e não está se comportando corretamente.
  2. Ele mata meu programa, possivelmente com uma mensagem útil de depuração ou registro
  3. Eu posso retomar minhas atividades

Mas isso não é o que acontece com uma instalação mais ou menos padrão do Ubuntu. o que acontece é isso:

  1. O programa com bugs pode ser executado "indefinidamente"
  2. Eventualmente, quando toda a memória física está esgotada, o sistema inicia a troca.
  3. À medida que o programa de bugs reivindica mais e mais memória, todas as páginas dos meus programas de desktop são enviadas para a troca. Meu disco rígido está começando a fazer sons muito assustadores
  4. Minha interface do usuário fica completamente sem resposta. Os cliques são registrados minutos após o ocorrido, o movimento do mouse é frequentemente ignorado.
  5. Qualquer acesso à máquina efetivamente é interrompido. Isso inclui a alteração de terminais virtuais, o login através de terminais virtuais e o login via SSH.
  6. Se eu conseguir de alguma forma matar o programa ofensivo, nem tudo está bem. Longe disso.
  7. Toda a interface do usuário e os serviços do sistema agora estão trocados e começam a ser lentamente substituídos pelo ram físico. Meu disco rígido ainda está ficando louco neste momento.
  8. Demora cerca de 0,5 - 1 hora para o meu sistema "se acalmar".

A reinicialização da máquina sem pressionar o botão de reset também leva uma eternidade. Quem teria pensado que algo simples como ficar sem memória provoca um evento tão cataclísmico?

Eu tenho várias perguntas:

  • Quem achou que usar o swap em um sistema de desktop seria uma boa ideia e por quê?
  • Devo simplesmente desativar a troca? Quais são as razões para não?
  • Existe uma maneira melhor do que desativar a troca? Por exemplo, existe uma maneira de limitar a troca para o programa nocivo e manter meus serviços do sistema e interface do usuário na memória física?
por fat-lobyte 30.08.2016 / 16:39

2 respostas

4

Você pode limitar a troca, a memória física ou as duas com cgroups . A maneira mais primitiva é usar ulimit, mas hoje em dia os cgroups são padrão. (Eu não vou copiar e colar toda a documentação do cgroups) Com cgroups, você também pode especificar o limite de uso da CPU e do disco de I / O por programa em uma hierarquia, para que você possa definir uma prioridade mais alta para suas tarefas importantes.

    
por 30.08.2016 / 17:02
0

Você pode querer ajustar o sysctl do swappiness e configurá-lo para 1 ou 0 para evitar o uso do disco quando a memória estiver esgotada.

    
por 30.08.2016 / 17:22