Organizar recursos do servidor para que o ssh esteja sempre disponível

4

Eu tenho um servidor Linux para uma das minhas aplicações web. De vez em quando, um processo (talvez um script de longa execução) pode sair do controle, consumir muitos ciclos de memória / CPU e bloquear todos os outros processos.

Em tais situações, não consigo fazer ssh no servidor e preciso reiniciar o servidor por meio de um painel de gerenciamento. Eu prefiro fazer o login na máquina e lidar apenas com o processo problemático.

É possível organizar os recursos em uma máquina linux de modo que, no entanto, um processo esteja consumindo recursos, sempre há recursos suficientes disponíveis para uma conexão ssh?

    
por Ozgur Akcali 03.11.2015 / 09:39

4 respostas

5

Você pode usar 'legal' para priorizar determinado software.

Você também pode verificar a instalação do monit, que pode ser instruído para reiniciar um determinado pacote se um determinado limite for atingido.

Uma configuração monit ao longo destas linhas reiniciará automaticamente o Apache:

check process apache
   with pidfile "/usr/local/apache/logs/httpd.pid"
   start program = "/etc/init.d/httpd start" with timeout 60 seconds
   stop program = "/etc/init.d/httpd stop"
   if 2 restarts within 3 cycles then timeout
   if totalmem > 100 Mb then alert
   if children > 255 for 5 cycles then stop
   if cpu usage > 95% for 3 cycles then restart
   if failed port 80 protocol http then restart
   group server
   depends on httpd.conf, httpd.bin
    
por 03.11.2015 / 10:15
2

De maneira simples - não. Você pode usar nice para definir o SSH para a prioridade mais alta, mas se não houver memória suficiente para lidar com a nova conexão, o ssh não funcionará (não esqueça que após o login bem-sucedido, o servidor deve iniciar o shell). Você pode usar OOM killer para matar automaticamente o processo com muitos ram consumidos, mas não funcionou se você tiver milhares de processos (como o forking louco do apache) e cada um consome um pouco de RAM (1000 x 4MB RAM = 4GB RAM consumido sem limite de OOM).

O reinício difícil é a solução mais simples e mais rápida. Se você precisar de alguns serviços para serem executados 24 horas por dia, 7 dias por semana, precisará usar duas máquinas na configuração de alta disponibilidade. Você pode usar o zabbix ou outra ferramenta de monitoramento para avisar e ter tempo para resolvê-lo antes que o servidor inteiro também falhe.

    
por 03.11.2015 / 11:09
0

Uma solução simples é renegar seu processo sshd para -20. Isso ainda pode fazer com que não responda se não puder bifurcar (ou seja, há muitos processos ou pouca memória), e será lento se precisar ser recarregado a partir da troca, mas reduz significativamente a probabilidade. Isto também tem o efeito colateral de que todo login de ssh terá uma prioridade -20, e - se você não for cuidadoso - cada processo iniciado a partir de um shell ssh terá prioridade alta. Você pode ou não querer que isso aconteça.

Há também uma maneira de desabilitar positivamente a troca por um processo, mas você precisaria corrigir seu sshd para chamar mlockall ou madvise , mas provavelmente não deseja fazer isso. Consulte link para obter detalhes .

    
por 03.11.2015 / 10:24
0

Você pode usar cgroups de memória para garantir que o Apache e o os processos que cria não podem passar fome pelo resto do sistema de memória. O sistema provavelmente está ficando sem resposta porque o Apache está consumindo memória suficiente para que o sistema inicie a troca.

Você pode configurar os crogups com cgcreate, cgset, cgclassify e cgexec ferramentas.

    
por 03.11.2015 / 18:09