Ir para o conteúdo

Por que minha instância do Linux do Amazon EC2 não responde?

9 minuto de leitura
0

Minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2) parou de responder.

Breve descrição

As instâncias do EC2 deixam de responder pelos seguintes motivos:

  • O uso da CPU é consistentemente igual ou próximo a 100% e não permite que o kernel execute operações típicas do sistema operacional (SO).
  • A instância ficou sem memória, então o Gerenciador Linux Out of Memory (OOM) encerrou processos como banco de dados, servidor web ou serviço SSH.
    Observação: as instâncias do EC2 não alocam espaço de troca por padrão.
  • O dispositivo raiz está 100% cheio e não permite que outros processos sejam concluídos ou iniciados, e você recebe os erros "No space left on device".
  • Sua instância não consegue se comunicar com outros hosts devido a problemas de rede.
  • Problemas de operação de E/S fazem com que instruções de leitura e gravação, como a criação de arquivos temporários, leituras de bibliotecas do sistema ou bancos de dados, fiquem bloqueadas.

Os problemas anteriores também podem se acumular. Por exemplo, você fica sem memória, então o Gerenciador OOM encerra um processo chave. Em seguida, um processo que depende do processo interrompido inicia um número maior de ciclos de CPU. Se o processo estiver relacionado ao disco, o ciclo também poderá usar todo o espaço de volume disponível do Amazon Elastic Block Store (Amazon EBS). Ou o problema pode ser transferido para uma instância que espera comunicação da instância que não responde.

Para solucionar problemas da instância que não responde, identifique a causa raiz do problema e, em seguida, adote medidas de solução com base nesse problema.

Resolução

Identificar a causa raiz do problema

Monitorar o uso da CPU com o CloudWatch

Use o agente Amazon CloudWatch para ver tendências no uso da CPU e identificar se o problema é contínuo, espontâneo ou recorrente.

Usar ferramentas de monitoramento do sistema

Se você tiver vários serviços, deverá identificar se o serviço usa recursos em excesso. Use ferramentas como sar ou atop e atopsar para obter estatísticas históricas de uso sobre os processos executados na sua instância. Para obter mais informações sobre como configurar as ferramentas, consulte Como configuro as ferramentas de monitoramento ATOP e SAR em uma instância do EC2 que está executando Amazon Linux, RHEL, CentOS ou Ubuntu?

Verificar os logs do sistema

Verifique os logs do sistema quanto a erros relacionados ao alto uso de recursos para identificar problemas no sistema ou na aplicação.

Execute o comando a seguir para visualizar as mensagens do kernel:

dmesg

Além disso, verifique os arquivos /var/log/syslog ou /var/log/messages para ver se há mensagens do sistema.

Analisar o histórico de comandos

Verifique no arquivo ~/.bash_history um histórico de comandos para identificar problemas como um script inesperado que está sendo executado em segundo plano.

Verificar se há alto uso de memória

Execute o comando a seguir para verificar o uso da memória:

free -h

Na saída, verifique as colunas used e free para identificar o uso da memória da sua instância. Para mais informações sobre o comando free, consulte Dissecting the free command: What the Linux sysadmin needs to know (Dissecando o comando free: o que o administrador de sistemas Linux precisa saber) no site da Red Hat.

Verificar se há alto uso de armazenamento

Se o uso de armazenamento do volume raiz for alto, seu dispositivo poderá estar cheio. Para identificar esse problema, verifique os logs do console da instância.

Solucionar problemas de alto uso da CPU

Identificar o processo que usa alta CPU

Use o comando pidstat ou ps para obter informações mais detalhadas sobre processos, como se o processo é do sistema ou do usuário. Para mais informações sobre os comandos, consulte pidstat e ps na página de manual do Linux.

Verificar se há tarefas programadas

Verifique se as tarefas programadas ou os cron jobs executados na instância causaram o alto uso da CPU. Primeiro, verifique as métricas do CloudWatch da sua instância para identificar o carimbo de data/hora de quando a utilização da CPU esteve alta.

Em seguida, execute o seguinte comando para listar os cron jobs:

sudo crontab -lsudo cat /etc/crontab
sudo cat crontab -l

Observação: o comando anterior verifica a configuração crontab para o usuário-raiz. Para verificar se há um usuário específico, adicione -u username ao comando e, em seguida, substitua username pelo nome do usuário.

Na saída do comando, verifique as tarefas executadas no momento em que o uso da CPU estava alto.

Verifique os seguintes logs:

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

Use o comando grep para filtrar entradas nos logs para cron jobs específicos e verificar se há erros. Para mais informações sobre o comando, consulte grep no site do manual do Linux.

Verificar o tráfego de rede

O alto tráfego de rede pode causar alto uso da CPU, especialmente se a instância gerencia um grande volume de solicitações de rede.

Execute o comando a seguir para monitorar o tráfego da rede:

iftop

Use a saída do comando para identificar oportunidades de otimizar sua configuração de rede. Certifique-se de que sua configuração não limite o tráfego da rede e que o tráfego esteja dentro da largura de banda correta para seu tipo de instância. Para mais informações, consulte Linux interface analytics on-demand with iftop (Análise de interface Linux sob demanda com iftop) no site da Red Hat. Se o tráfego de rede for consistentemente alto, é uma prática recomendada atualizar seu tipo de instância para um tamanho maior.

Verificar a E/S do disco

Uma alta E/S de disco pode causar alto uso da CPU. Para identificar processos que causam alta E/S, execute o seguinte comando:

iostat

Para obter mais informações, consulte I/O reporting from the Linux command line (Relatórios de E/S da linha de comandos do Linux) no site da Red Hat.

Para finalizar um processo desnecessário, execute o comando kill. Para mais informações, consulte kill no site do manual do Linux.

Para solucionar outros problemas de alto uso da CPU, consulte Como soluciono problemas de alta utilização da CPU em uma instância do Linux do Amazon EC2?

Solucionar problemas de alto uso de memória

Para solucionar problemas de alto uso de memória, consulte Como soluciono problemas de alta utilização de memória na minha instância Linux do EC2?

Solucionar problemas de "no space left on device"

Para solucionar problemas de alto uso do dispositivo raiz, use o console de série do EC2 para se conectar à sua instância e excluir arquivos desnecessários. É possível usar o console de série do EC2 para instâncias criadas no AWS Nitro System e com suporte para instâncias bare metal. Você não precisa de uma conexão ativa para se conectar à instância quando usar o Console de Série do EC2. No entanto, você deve seguir os pré-requisitos do console de série do EC2.

Se sua instância estiver inacessível e você ainda não tiver configurado o acesso ao console de série, não será possível usar o Console de Série do EC2. Nesse cenário, use SSH para se conectar à sua instância e, em seguida, aumente o tamanho do volume do Amazon EBS.

Se não for possível usar o console de série ou o SSH, execute uma instância de resgate e use-a para excluir arquivos desnecessários. Para obter instruções, consulte Solucionar o erro "No space left on device" em Como soluciono problemas de uma instância do Linux do EC2 que apresenta falha na verificação de status devido ao uso excessivo de recursos?

Otimizar o código

Se a aplicação causar alto uso da CPU, identifique e elimine gargalos de desempenho em seu código. Use ferramentas como perf ou strace para identificar problemas de código. Para obter instruções, consulte Recording and analyzing performance profiles with perf (Como gravar e analisar perfis de desempenho com perf) e How do I use strace to trace system calls made by a command? (Como uso o strace para rastrear chamadas do sistema feitas por um comando?) no site da Red Hat.

Atualizar a instância

Se seus processos usam consistentemente um grande volume de recursos por motivos válidos, como uma alta ingestão de usuários, aumente o tamanho da instância. Para obter mais informações sobre os requisitos, consulte Quais etapas eu preciso seguir antes de alterar o tipo da minha instância do Linux do EC2?

Use o AWS Compute Optimizer para identificar o tipo e o tamanho corretos da instância para seus requisitos de configuração. Também é possível usar o Amazon EC2 Auto Scaling para escalar horizontalmente.

Configurar regras de auditoria do Linux

Para obter mais visibilidade dos comandos do usuário e das alterações de configuração, configure o sistema Linux Audit para rastrear as alterações.

Atualizar a configuração para evitar o uso excessivo de recursos no futuro

Antes de implantar uma nova aplicação em produção, crie um ambiente de teste. Use o ambiente para comparar a aplicação e determinar a computação, a memória, a capacidade de volume do EBS e o tráfego de rede necessários. Em seguida, implante sua aplicação com base nos requisitos de referência. Para obter as práticas recomendadas para criar tolerância a falhas, consulte Projete as interações em um sistema distribuído para evitar falhas.

Verifique o alto desempenho dos arquivos de configuração, das consultas ao banco de dados e do código que são executados na sua instância. Se sua aplicação usa muitos bancos de dados, é uma prática recomendada usar o cache para reduzir o número de consultas ao banco de dados.

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 que causam alto uso da CPU.

Se sua aplicação recebe alto volume de tráfego, use um balanceador de carga para distribuir o tráfego em várias instâncias do EC2. Um balanceador de carga reduz o uso da CPU em instâncias individuais.

Monitore continuamente o uso de recursos das suas instâncias. Crie alarmes do CloudWatch para identificar automaticamente instâncias com risco de uso excessivo de recursos.

AWS OFICIALAtualizada há 6 meses