Reiniciar o sistema se ficar sem memória?

Reiniciar o sistema se ficar sem memória?

Preciso executar alguns testes de memória pesada em um computador remoto por meio de SSH. Da última vez que fiz isso, o computador parou de responder e foi necessário que alguém o reiniciasse fisicamente.

Existe uma maneira de configurá-lo para que o sistema seja reiniciado em vez de congelar se muita memória estiver sendo usada? (Eu tenho acesso root). A versão do kernel é 4.9.0.

Responder1

Para monitorar/recuperar o controle de um servidor "instável"/starver, aconselho usar um hardware ou, na sua falta, um watchdog de software; no Debian você pode instalá-lo com:

sudo apt-get install watchdog

Em seguida, você edita /etc/watchdog.confe adiciona limites ou testes; do topo da minha cabeça, o watchdog também é ativado de forma que, se o kernel não o vir por um bom tempo, ele será reinicializado. por exemplo, se uma rotina de software não conversa em um horário fixo /dev/watchdog0ou algo semelhante.

Por exemplo, você pode definir limites de carga em /etc/watchdog.conf:

max-load-1             = 40
max-load-5             = 18
max-load-15            = 12

Esteja ciente também de que algumas placas/chipsets vêm com watchdogs integrados; se não me engano o Arm A20 é um deles.

Dehomem cão de guarda

O kernel do Linux pode redefinir o sistema se forem detectados problemas sérios. Isso pode ser implementado através de hardware de watchdog especial ou através de um watchdog apenas de software um pouco menos confiável dentro do kernel. De qualquer forma, é necessário haver um daemon que informe ao kernel que o sistema está funcionando bem. Se o daemon parar de fazer isso, o sistema será reinicializado.

watchdog é um daemon. Ele abre /dev/watchdog e continua gravando nele com freqüência suficiente para evitar que o kernel seja reiniciado, pelo menos uma vez por minuto. Cada gravação atrasa o tempo de reinicialização em mais um minuto. Após um minuto de inatividade, o hardware do watchdog causará a reinicialização. No caso do watchdog de software, a capacidade de reinicialização dependerá do estado das máquinas e das interrupções.

O daemon watchdog pode ser interrompido sem causar uma reinicialização se o dispositivo /dev/watchdog estiver fechado corretamente, a menos que seu kernel seja compilado com a opção CONFIG_WATCHDOG_NOWAYOUT habilitada.

Veja tambémRaspberry Pi e Arduino: construindo sistemas confiáveis ​​com temporizadores WatchDog

Responder2

Para responder sua pergunta específica, você pode definir sysctls como:

vm.panic_on_oom=1
kernel.panic=10

para que o kernel entre em pânico se o sistema ficar sem memória e reinicie após dez segundos de pânico.

Em novos sistemas com suporte total ao cgroups2, o systemd-oomd pode ser uma opção menos drástica.

informação relacionada