Por que minha instância Linux do EC2 está ficando sem resposta devido à utilização excessiva de recursos?

Última atualização: 25/10/2021

Minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2) para de responder devido à utilização excessiva de recursos. Como posso evitar isso?

Breve descrição

Existem várias causas comuns para que uma instância pare de responder:

Memória: as instâncias do EC2 não têm espaço de troca alocado por padrão. A falta de memória pode invocar o gerenciador de Memória insuficiente (OOM) do Linux. O gerenciador de OOM encerra processos, como um banco de dados, um servidor da Web ou o serviço SSH.

Rede: sem rede, seu sistema não pode responder a solicitações ARP de verificações de status. Quando isso ocorre, a instância não consegue se comunicar com outros hosts.

Amazon Elastic Block Store (Amazon EBS): sem E/S de disco, as instruções de leitura ou gravação ficam travadas. Por exemplo, criação de arquivos temporários, leituras de bibliotecas do sistema ou bancos de dados.

CPU: todas as tarefas anteriores exigem tempo de CPU para funcionar. O uso 100% da CPU por um tempo prolongado impede que o kernel execute operações normais do sistema operacional.

Esses problemas também podem se acumular em um efeito de bola de neve. Por exemplo, você fica sem memória e o gerenciador de OOM encerra um processo importante. Agora, um segundo processo que depende do primeiro processo que foi interrompido inicia um número muito maior de ciclos de CPU. Se essa tarefa estiver relacionada ao disco, esse ciclo também poderá esgotar o volume do EBS. Além disso, o problema pode ser transferido para uma instância diferente que espera comunicação da instância que não responde.

Resolução

Se o sistema geralmente não responder devido à utilização excessiva de recursos, faça o seguinte:

Obtenha informações

  1. Use uma ferramenta de monitoramento como o Amazon CloudWatch para observar tendências e padrões de alta utilização de recursos.
  2. Se você tiver vários serviços e não tiver certeza de qual deles está utilizando recursos em excesso, instale um utilitário como o atop.
  3. Analise os logs da aplicação e do sistema operacional. Esses logs geralmente estão localizados em /var/log/.
  4. Revise o histórico de comandos para ver se houve erro humano. O histórico de comandos geralmente está localizado no arquivo ~/.bash_history.
  5. Revise cronjobs executando o comando crontab -l.

Proceda com base nos dados adquiridos

  • Você pode achar que sua aplicação requer alterações de configuração ou código para otimizar a utilização de recursos.
  • Se seus processos estiverem utilizando muitos recursos por motivos válidos, como o alto consumo de usuários, atualize sua instância.
    O AWS Compute Optimizer é uma fonte útil para gerar tamanhos de instância recomendados. Você também pode escalar horizontalmente usando o Amazon EC2 Auto Scaling.
  • Se você quiser mais visibilidade sobre os comandos do usuário e as alterações de configuração, você pode instalar “audit” para rastrear as alterações.

Evite o excesso de utilização futura

  1. Antes de implantar uma nova aplicação em produção, crie um ambiente de teste e um benchmark para determinar a computação, a memória, o EBS e a rede necessários.
  2. Implante de acordo com seus benchmarks ao construir para tolerância a falhas. Para obter mais informações, consulte o seguinte:
    Projete as interações em um sistema distribuído para evitar falhas
    Tutorial: Set up a scaled and load-balanced application
  3. Continue monitorando suas instâncias e crie alarmes para determinados limites de uso de recursos.

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?