Ir para o conteúdo

Como soluciono problemas de alta utilização da CPU em uma instância do Linux do Amazon EC2?

6 minuto de leitura
0

Quero solucionar problemas de alta utilização da CPU ou alto steal time na minha instância Linux do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

A alta utilização da CPU pode ocorrer devido à atividade no nível da aplicação, instâncias subprovisionadas do EC2 ou incompatibilidades de monitoramento. Para solucionar problemas de alta utilização da CPU, verifique as métricas de steal time do seu ambiente. O steal time da CPU é o tempo em que uma instância está pronta, mas não pode continuar porque os recursos físicos subjacentes estão alocados em outro lugar. O alto steal time afeta o desempenho da aplicação e causa lentidão, tempos limite e comportamento inconsistente.

O alto steal time ocorre pelos seguintes motivos:

  • Uma instância vizinha no mesmo host físico subjacente enfrenta altas demandas de CPU.
  • O hipervisor da instância está sobrecarregado com solicitações.
  • O saldo de crédito da CPU em uma instância com capacidade de intermitência está esgotado.

Observação: é possível observar diferenças entre as métricas do Amazon CloudWatch e as métricas da ferramenta em nível de instância. Isso ocorre porque o CloudWatch coleta métricas no nível do hipervisor, mas as ferramentas de instância medem de dentro do sistema operacional (SO) convidado. O CloudWatch também faz amostras em intervalos de 1 a 5 minutos em que as ferramentas de instância podem fornecer dados segundo a segundo. Os métodos de cálculo de sincronização de tempo e uso da CPU também podem causar discrepâncias.

Resolução

Para solucionar problemas de alta utilização da CPU em sua instância Linux, realize as seguintes ações de solução de problemas.

Meça o steal time da CPU da sua configuração

Para ver o steal time da sua configuração, execute o seguinte comando:

top

Exemplo de saída:

top - 14:23:45 up 7 days, 2:03, 1 user, load average: 0.45, 0.50, 0.45
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 2.1 sy, 0.0 ni, 85.6 id, 1.2 wa, 0.0 hi, 0.3 si, 5.5 st
MiB Mem : 3949.2 total, 146.7 free, 1367.8 used, 2434.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2312.8 avail Mem

Na saída, verifique o valor de st para obter a porcentagem do steal time da CPU. No exemplo anterior, o steal time representa 5,5% de todo o tempo de CPU. É uma prática recomendada manter o steal time abaixo de 5%. Se seu steal time estiver consistentemente acima de 10%, verifique se há problemas de configuração incorreta em sua instância.

Em workloads que exigiram recursos dedicados, é uma prática recomendada usar um host dedicado do Amazon EC2.

Use o CloudWatch para monitorar sua CPU

Use o CloudWatch para monitorar o desempenho da sua instância. Verifique a métrica CPUUtilization de sua instância e as métricas CPUCreditUsage e CPUCreditBalance para instâncias t2 e t3.

Se houver uma discrepância entre as métricas do CloudWatch e o que você vê na instância, verifique se você configurou corretamente o agente do CloudWatch. Verifique se há erros no /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log.

Observação: o CloudWatch não fornece métricas de steal time por padrão. Em vez disso, você deve configurar o agente do CloudWatch para adicionar métricas personalizadas.

Use ferramentas em nível de instância para monitorar a instância

Para uma interface mais fácil de usar para visualizar o steal time de sua configuração, use htop em vez do comando top. Para baixar o htop, consulte htop-dev/htop no site do GitHub.

Para visualizar o uso detalhado de recursos no nível do sistema, como memória, paginação, E/S e CPU ao longo do tempo, execute o seguinte comando:

vmstat

Exemplo de saída:

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b  swpd      free buff cache  si so bi bo in cs us sy id wa st
0 0    0    150272 97545 2394124   0  0  0  5  1  2 5 2 86  1 6
0 0    0    150272 97545 2394124   0  0  0  0 435 625 4 2  88 0 6

Observação: para visualizar o steal time, verifique a coluna st.

Para visualizar dados históricos sobre seus recursos, execute o seguinte comando:

sar

Exemplo de saída:

 $ sar -P ALL 1 3
Linux 5.4.0-1045-aws (ip-10-0-1-100) 04/22/2025 _x86_64_ (2 CPU)
4:25:00 CPU %user %nice %system %iowait %steal %idle
14:25:01 all 4.50 0.00 2.00 1.00 5.50 87.00
14:25:01 0 4.00 0.00 2.00 1.00 6.00 87.00
14:25:01 1 5.00 0.00 2.00 1.00 5.00 87.00

Observação: é possível configurar o sar para coletar métricas de CPU em intervalos regulares. Para obter mais informações, consulte The sar command (O comando sar) no site da Red Hat.

Verifique seu saldo de tipos de instâncias com capacidade de intermitência

Diferentes tipos de instância são mais suscetíveis a problemas de steal time. Por exemplo, o uso contínuo e elevado de CPU pode esgotar os créditos de CPU e limitar o desempenho em tipos de instância com capacidade de intermitência, como t2 e t3.

Se o saldo de crédito do seu tipo de instância com capacidade de intermitência for consistentemente baixo ou igual a 0, altere o tipo de instância para um tamanho maior. Ou altere o tipo de instância para uma instância sem capacidade de intermitência, como uma série m, c ou r.

Otimize sua configuração de instância ou aplicação

Se um processo específico usa CPU excessivamente, realize as seguintes ações:

  • Investigue se a alta utilização da CPU é o comportamento esperado.
  • Verifique os logs da sua aplicação em busca de erros ou comportamentos inesperados.
  • Reinicie a aplicação ou o serviço.

Se a utilização da CPU for consistente com o comportamento esperado, mas ainda assim muito alta, ajuste sua aplicação para melhorar a eficiência. Por exemplo, é uma prática recomendada mover workloads com uso intenso em computação para uma instância ou contêiner diferente.

Gerencie seus padrões de tráfego e carga

Se a alta utilização da CPU for um problema recorrente devido aos padrões de tráfego ou carga, realize as seguintes ações:

Informações relacionadas

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?

AWS OFICIALAtualizada há 5 meses