Por que estou vendo um uso alto ou crescente da CPU no meu cluster do ElastiCache para Redis?

5 minuto de leitura
0

Estou vendo um uso alto ou crescente da CPU no meu cluster do Amazon ElastiCache para Redis. Como posso solucionar esse problema?

Breve descrição

Há duas métricas de CPU do Amazon CloudWatch para o ElastiCache para Redis:

  • EngineCPUUtilization: essa métrica relata a utilização de CPU pelo thread do mecanismo Redis. Como o Redis é de thread único, é uma prática recomendada monitorar a métrica EngineCPUUtilization para nós com quatro ou mais vCPUs.
  • CPUUtilization: essa métrica mostra a porcentagem de utilização da CPU para todo o host. Para nós menores com duas vCPUs ou menos, use a métricaCPUUtilization para monitorar a workload do cluster.

Resolução

EngineCPUUtlilization elevada

A seguir estão os motivos comuns para a EngineCPUUtilization elevada:

  • Um comando de longa duração que consome muito tempo de CPU: comandos com alta complexidade de tempo, como keys, hkeys, hgetall e assim por diante, consomem maior tempo de CPU. Para obter sugestões de complexidade de tempo e performance para cada comando, consulte Comandos no site redis.io. Os scripts Lua (executados pelos comandos EVAL ou EVALSHA do Redis) são uma operação atômica no Redis. Todas as atividades do servidor são bloqueadas durante todo o tempo de execução de um script Lua, causando EngineCPUUtilization elevada. Verifique se há comandos de longa execução ou um script Lua de longa execução usando o log Redis Slow.
  • Um grande número de solicitações: verifique as estatísticas dos comandos para determinar se há intermitências de comando ou se a latência está aumentando. Você pode verificar a estatística do comando usando métricas do CloudWatch, como GetTypeCmds ou HashBasedCmds. Ou você pode usar o comando Redis info commandstats. Se você observar um grande número de solicitações devido à workload esperada no aplicativo, considere escalar o cluster.
  • Backup e replicação: verifique a métrica SaveInProgress para ver se o backup ou a replicação estão ocorrendo. Essa métrica binária retorna "1" quando um salvamento em segundo plano (bifurcado ou sem bifurcação) está em andamento. A métrica retorna "0" se um salvamento em segundo plano não estiver em andamento. Verifique se você tem memória suficiente para criar um snapshot do Redis.
  • Alto número de novas conexões: estabelecer uma conexão TCP é uma operação computacionalmente cara, especialmente para clusters habilitados para TLS. Um grande número de novas solicitações de conexão de clientes em um curto período de tempo pode causar um aumento na EngineCPUUtilization. Melhorias de performance para clusters habilitados para TLS usando tipos de nós x86 com oito vCPUs ou mais em tipos de nó Graviton2 com quatro vCPUs ou mais foram implementadas desde o Redis 6.2. Para obter recomendações sobre como lidar com um grande número de conexões, consulte Práticas recomendadas: clientes Redis e Amazon ElastiCache para Redis.
  • Alto número de remoções: o Redis remove chaves de acordo com o parâmetro maxmemory-policy. A remoção acontece quando o cache não tem memória suficiente para armazenar novos dados. Se o volume de remoção for alto, a EngineCPUUtilization aumentará porque o Redis está ocupado removendo as chaves. O volume de remoção pode ser monitorado usando as métricas Remoções do CloudWatch. Se a remoção for elevada, aumente a escala do cluster verticalmente usando um tipo de nó maior ou aumente a escala horizontalmente adicionando mais nós.
  • Alto número de recuperação: para liberar memória, o Redis faz amostras e exclui todas as chaves que atingiram a o tempo limite. Esse processo é chamado de “recuperação”. Se houver um número alto de expirações, o EngineCPUUtilization aumenta porque o Redis está ocupado recuperando as chaves. Você pode monitorar o número de eventos de expiração de chaves usando as métricas do CloudWatch Reclaimed. É uma prática recomendada que você não deixe expirar muitas chaves ao mesmo tempo, por exemplo, executando o comando EXPIREAT do Redis.

Para obter mais informações sobre como solucionar problemas de EngineCPUUtilization elevada, consulte Solução de problemas de conexões, uso da CPU.

CPUUtilization elevada

Veja a seguir os motivos comuns para a CPUUtilization elevada:

  • Alto tráfego de rede ou conexões: verifique as Métricas do CloudWatch NewConnections, NetworkBytesIn, NetworkBytesOut, NetworkPacketsIn e NetworkPacketsOut.
  • EngineCPUUtilization elevada e E/S assíncrona que é processada por outros threads: para obter detalhes sobre o processamento aprimorado de E/S, consulte Aumento de performance do Amazon ElastiCache com instâncias M5 e R5 do Amazon EC2.
  • Manutenção gerenciada contínua e atualizações de serviço: as atualizações de manutenção e serviço precisam de capacidade computacional. Como resultado, você pode notar um aumento na CPUUtilization durante esses eventos. Verifique a janela de manutenção para ver se o pico coincide com a janela. É uma prática recomendada definir a janela de manutenção no momento de menor uso para minimizar o impacto. Para obter mais informações, consulte a Página de ajuda para manutenção gerenciada e atualizações de serviço do Amazon ElastiCache.
  • Paginação e operações elevadas, como backup: memória insuficiente no nó pode fazer com que a memória de saída de página do kernel faça swap. Se a paginação for excessiva, você poderá ver um aumento na CPUUtilization. Da mesma forma, se a carga no nó for alta durante operações como backup ou escala, você poderá observar um aumento na CPUUtilization. Para obter recomendações sobre métricas para identificar a causa de um pico, consulte Monitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch (Monitoramento de práticas recomendadas com o Amazon ElastiCache para Redis usando o Amazon CloudWatch).

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos