Mantenha o sistema acessível em caso de congelamento

0

Nós rodamos um pequeno servidor (Ubuntu 14.04) apenas para fins de computação. De tempos em tempos, um usuário conseguirá consumir memória suficiente para congelar o sistema. A última vez, o culpado foi um processo que gerou 30 subcomprometimentos de memória. O resultado é que eu não consigo logar na máquina para consertá-lo - o ssh e o login local apenas esgotam o tempo limite. O assassino de OOM não parecia fazer nada. egrep -i 'killed process' /var/log/* não retornou nada.

Existe uma maneira de manter / obter acesso à linha de comando em tais circunstâncias?

    
por nkaleidoskop 07.06.2016 / 15:02

2 respostas

2

Existe uma maneira de limitar o uso de recursos do sistema.
Verifique o comando ulimit e seu uso. Tem um arquivo conf limits.conf onde você pode especificar quais grupos podem ter quantos recursos. Por exemplo, se você especificar no arquivo conf:

@developers        soft    nproc          20
@developers        hard    nproc          30

o grupo developers pode ter apenas 30 processos e receberá um aviso ao atingir 20. Você também pode limitar o número de processos globalmente com ulimit -u 10 - nesse caso, os usuários podem executar 10 processos.

Use ulimit -a para exibir os limites atuais. Para limitar a memória, tente usar ulimit -v .

user@localhost:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 256646
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32768
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
    
por 07.06.2016 / 15:23
0

Você pode fazer coisas para tentar impedir que isso aconteça, como mazs menciona em sua resposta. Mas para que a caixa se recupere de qualquer situação, mesmo aquelas que você não espera, você quer um cão de guarda.

No Linux, um watchdog é um processo que envia um "ping" periodicamente e, se esse "ping" não for recebido, o sistema é redefinido. Quando eu digo "ping", eu não quero dizer isso como uma solicitação de eco ICMP de rede, mas apenas uma mensagem "hey eu ainda estou vivo". O ping pode ser enviado para um watchdog físico, o que pode fazer algo como energizar o host para executar a reinicialização, mas também pode ser algo dentro do kernel do Linux. O último é o que você provavelmente desejará, pois os dispositivos watchdog de hardware normalmente só são encontrados em equipamentos de nível empresarial.

De qualquer forma, para começar, primeiro você precisa do watchdog do software ativado em seu kernel. Este é provavelmente o maior obstáculo. Eu não tenho idéia se o Ubuntu tem o watchdog habilitado ou não. Veja se você tem /dev/watchdog disponível. Caso contrário, tente modprobe softdog . Se nenhum dos dois funcionar e você ainda quiser fazer isso, precisará recompilar seu kernel com a opção SOFT_WATCHDOG .

Agora, supondo que você tenha o watchdog ativado, é necessário instalar o pacote watchdog .

Uma vez instalado, coloque um script em /etc/watchdog.d que você deseja usar para realizar sua verificação de integridade (também pode usar test-binary em watchdog.conf ) e torná-lo executável. Se você quisesse ter certeza de que o ssh está funcionando, você poderia fazer algo como:

#!/bin/bash
case "$1" in
test)
  ssh testuser@localhost /bin/true
  ;;
repair)
  service ssh restart
  ;;
*)
  false
  ;;
esac

(Para fazer exatamente como acima, você precisará criar testuser e configurar a autenticação de chave pública, mas isso está fora do escopo desta resposta)

O watchdog irá invocar o script com test para fazer a verificação de integridade e tentará repair se falhar. Se o reparo também falhar, o sistema será reinicializado.

Veja a documentação do watchdog para mais detalhes.

    
por 08.06.2016 / 08:19

Tags