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

7 minuto de leitura
0

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

Breve descrição

Há várias causas comuns pelas quais uma instância deixa de responder:

  • Memória: As instâncias do EC2 não têm espaço de swap alocado por padrão. A falta de memória invoca o gerenciador Linux Out Of Memory (OOM). O gerenciador de OOM encerra processos, como um banco de dados, servidor web ou serviço SSH.
  • Rede: Sem rede, seu sistema não pode responder às solicitações ARP a partir de verificações de status. Quando isso ocorre, sua instância não consegue se comunicar com outros hosts.
  • Operações de E/S: 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 de 100% da CPU por um período prolongado impede que o kernel execute operações normais do sistema operacional.

Esses problemas também podem se acumular em um efeito 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 Amazon Elastic Block Store (Amazon EBS). Além disso, o problema pode ser transferido para uma instância diferente que está esperando a comunicação da instância que não responde.

Resolução

Se o seu sistema tem alta utilização da CPU, ou muitas vezes deixa de responder devido à utilização excessiva de recursos, faça o seguinte:

Reúna informações

Monitore o uso da CPU usando o Amazon CloudWatch

Use uma ferramenta de monitoramento como o Amazon CloudWatch para observar tendências e padrões de alta utilização de recursos.

Use ferramentas de monitoramento do sistema

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 atop. Você também pode usar ferramentas como htop, top e sar. Todas essas ferramentas ajudam a identificar os processos que estão consumindo a maior parte do uso da CPU. Para obter mais informações, consulte:

Obter mais informações sobre o processo que está usando alta CPU

Use o comando pidstat ou ps para obter informações mais detalhadas sobre o processo. As informações fornecidas na saída do comando ajudam a determinar se o processo é um do sistema ou do usuário. Para obter mais informações sobre como configurar e usar as ferramentas necessárias para executar esses comandos, consulte o seguinte:

  • pidstat(1) na página do manual do Linux
  • ps(1) na página do manual do Linux

Verifique os log do sistema

Verifique os erros ou avisos relacionados ao alto uso da CPU. Por exemplo, use o comando dmesg para visualizar as mensagens do kernel e visualizar se há mensagens do sistema nos arquivos /var/log/syslog ou /var/log/messages. A saída do comando e o conteúdo do arquivo de log ajudam a identificar problemas no sistema ou no aplicativo que estão causando problemas.

Revise o histórico de comandos

Revise o histórico de comandos para ver se houve um erro humano. O histórico de comandos geralmente fica no arquivo ~/.bash_history.

Verifique se há trabalhos agendados

Verifique se há algum trabalho agendado ou trabalho cron em execução na instância do EC2 que possa causar alto uso da CPU. Primeiro, confirme a data e a hora do alto uso da CPU. Em seguida, execute o seguinte comando para listar os trabalhos cron:

sudo crontab -l
sudo cat /etc/crontab
sudo cat crontab -l -u <username>

O comando anterior lista a configuração crontab para o usuário raiz. Inclua a opção**-u** no comando para verificar o cron para um usuário específico. Em seguida, verifique a hora em que você notou o problema. Verifique seus logs, incluindo o seguinte:

/var/log/messages
/var/log/syslog
/var/log/dmesg
/var/log/cron.log

Use o comando grep para filtrar entradas relevantes para os trabalhos cron específicos que você deseja investigar. Confirme se ocorreram erros relacionados a um dos cron identificados.

Verifique o uso da memória

O alto uso de memória pode levar ao alto uso da CPU devido ao uso do espaço de troca. Use o comando free para verificar o uso da memória. Para obter mais informações sobre como configurar e usar as ferramentas necessárias, consulte Dissecar o comando free no site redhat.com.

Verifique o tráfego de rede

O alto tráfego de rede pode causar alta utilização da CPU, especialmente se a instância está lidando com muitas solicitações de rede. Use o comando iftop para monitorar o tráfego de rede e considere otimizar sua configuração de rede ou atualizar seu tipo de instância, se necessário. Para obter mais informações sobre como configurar e usar as ferramentas necessárias, consulte Análise de interface Linux sob demanda com iftop no site redhat.com.

Verifique a E/S do disco

Uma alta E/S de disco pode causar alto uso da CPU. Use o comando iostat para monitorar a E/S do disco e identificar quaisquer processos que possam causar alta E/S. Para obter mais informações, consulte Relatórios de E/S da linha de comando do Linux no site redhat.com.

Aja com base nos dados adquiridos

Otimize o código

Se seu aplicativo estiver causando alto uso da CPU, otimize seu código. Para fazer isso, identifique e elimine gargalos de desempenho. Ferramentas de criação de perfil, como perf ou strace, ajudam a identificar códigos problemáticos. Para obter mais informações sobre como configurar e usar as ferramentas necessárias, consulte o seguinte:

Atualize sua instância

Se seus processos estão utilizando muitos recursos por motivos válidos, como alta ingestão de usuários, considere atualizar sua instância.

O AWS Compute Optimizer pode ajudar você a decidir o tipo e o tamanho apropriados da instância a ser usada. Você também pode considerar escalar horizontalmente usando o Amazon EC2 Auto Scaling.

Configure regras de auditoria do Linux

Se você quiser mais visibilidade sobre os comandos do usuário e as alterações de configuração, poderá configurar o sistema Linux Audit para rastrear alterações.

Evite a utilização excessiva futura

  1. Antes de implantar um novo aplicativo na produção, crie um ambiente de teste e um parâmetro para determinar a computação, a memória, o EBS e a rede necessários. Implemente de acordo com seus parâmetros e, ao mesmo tempo, desenvolva a tolerância a falhas. Para obter mais informações, consulte: 
    Projete interações em um sistema distribuído para evitar falhas
    Tutorial: Configurar um aplicativo escalonado e com balanceamento de carga
  2. Verifique se os aplicativos em execução na instância estão otimizados para desempenho. A otimização envolve ajustar arquivos de configuração, otimizar consultas ao banco de dados ou otimizar o código.
  3. Se seu aplicativo estiver cheio de bancos de dados, considere implementar o armazenamento em cache para reduzir o número de consultas ao banco de dados.
  4. Verifique se seu software está atualizado com os patches de segurança e correções de erros mais recentes. Software desatualizado pode causar problemas de desempenho e vulnerabilidades, levando à alta utilização da CPU.
  5. Se seu aplicativo recebe alto volume de tráfego, considere usar um balanceador de carga para distribuir o tráfego em várias instâncias do EC2. Um balanceador de carga reduz a utilização da CPU em qualquer instância.
  6. Continue monitorando suas instâncias e crie alarmes para determinados limites de uso de recursos.
AWS OFICIAL
AWS OFICIALAtualizada há 9 meses