Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Como posso verificar o uso de memória em meu cluster autodesenvolvido do ElastiCache para Redis e implementar práticas recomendadas para controlar o alto uso de memória?
Quero verificar o uso de memória no meu cluster autodesenvolvido do Amazon ElastiCache para Redis e implementar práticas recomendadas para controlar o alto uso de memória.
Breve descrição
A seguir estão as causas do alto uso de memória em seu cluster autodesenvolvido do ElastiCache para Redis:
- Chaves adicionadas recentemente: pares adicionais de valor-chave causam um aumento no uso da memória. Além disso, elementos adicionais em chaves que já existem causam um aumento no uso da memória. Para identificar alterações recentes de dados em um nó, verifique a métrica SetTypeCmds. Para obter mais informações, consulte o comando commandstats na página INFO do site do Redis.
- Aumento do uso do buffer: os clientes são conectados ao Redis pela rede. Se o cliente, que inclui clientes Pub/Sub, não ler do cache com rapidez suficiente, o Redis manterá os dados de resposta no buffer de saída do cliente.Para obter mais informações, consulte Redis Pub/Sub e Output buffer limits e no site do Redis. Se houver um gargalo na largura de banda da rede ou se o cluster tiver uma carga pesada continuamente, o uso do buffer poderá se acumular. Isso resulta em exaustão da memória e degradação do desempenho. Por padrão, o ElastiCache para Redis não restringe o crescimento do buffer de saída, e cada cliente tem seu próprio buffer. Para verificar o uso do buffer, use o comando client list. Para obter mais informações, consulte CLIENT LIST no site do Redis.
- Grande número de novas conexões: um grande número de novas conexões pode aumentar o uso da memória. Todas as novas conexões criam um descritor de arquivo que consome memória, e esse consumo agregado de memória pode levar ao despejo de dados ou a erros OOM. Para visualizar o número de novas conexões, verifique a métrica NewConnections.
- Alto uso de permuta: É um comportamento normal ter algum uso de permuta em um nó de cache quando há memória livre. No entanto, o uso excessivo de permuta pode levar à diminuição do desempenho. O alto uso de permuta ocorre em um nó que está sob alta pressão de memória. Isso resulta em pouca memória liberável. Para monitorar a permuta no host, use a métrica SwapUsage.
- Alta fragmentação da memória: a alta fragmentação da memória indica ineficiências no gerenciamento de memória do sistema operacional. O Redis pode não liberar memória quando as chaves são removidas. Para monitorar a taxa de fragmentação, use a métrica MemoryFragmentationRatio. Se tiver problemas de fragmentação, ative o parâmetro activedefrag para desfragmentação ativa da memória.
- Chaves grandes: chaves grandes têm um grande tamanho de dados ou um grande número de elementos. Chaves grandes podem causar alto uso de memória. Para detectar chaves grandes em seu conjunto de dados, use o comando redis-cli --bigkeys ou o comando redis-cli --memkeys. Para obter mais informações, consulte Scanning for big keys e Scanning keys no site do Redis.
Resolução
Verificar o uso da memória
Para verificar o uso de memória em seu cluster autodesenvolvido do ElastiCache for Redis, examine as seguintes métricas do Redis:
Observação: essas métricas são publicadas no Amazon CloudWatch para cada nó em um cluster.
- BytesUsedForCache: Esse é o número total de bytes alocados pelo Redis para todos os fins. Esse valor é usado para determinar a utilização de memória de um cluster. Para recuperar essa métrica, execute o comando INFO em um nó do Redis. Para obter mais informações, consulte INFO no site do Redis.
- FreeableMemory: é uma métrica em nível de host que mostra a quantidade de memória livre disponível no host. Se o uso da memória aumentar devido aos dados do cache ou à sobrecarga, FreeableMemory diminuirá. Uma redução em FreeableMemory indica pouca memória no host. A permuta pode ocorrer quando FreeableMemory estiver muito baixo.
- DataBaseMemoryUsagePercentage: é a porcentagem de memória usada por um nó do cluster. Quando essa métrica atinge 100% do limite, o Redis inicia a política de despejo de memória máxima do Redis. Para obter mais informações, consulte Key eviction no site do Redis. Para recuperar essa métrica, execute o comando INFO em um nó do Redis. Para obter mais informações, consulte INFO no site do Redis.
Observação: por padrão, o ElastiCache reserva 25% da maxmemory para uso não relacionado a dados, como failover e backup. Se você não especificar memória reservada suficiente para uso não relacionado a dados, a permuta poderá aumentar. Para obter mais informações, consulte Gerenciamento da memória reservada.
Práticas recomendadas para controlar o alto uso de memória
- Usar TTL nas teclas: Para evitar o armazenamento de chaves desnecessárias e remover chaves que expiram, especifique TTL nas chaves para expiração. Para obter mais informações, consulte TTL no site do Redis. Se você tiver um grande número de evacuações de chaves, seu nó será executado sob pressão de memória. Para evitar chaves que expiram na mesma janela de tempo, adicione aleatoriedade ao usar o TTL.
- Use uma política de remoção: Quando a memória cache fica cheia, o Redis remove as chaves para liberar espaço com base em maxmemory-policy. A política padrão maxmemory-policy é definida como volatile_lru. É uma prática recomendada escolher uma política de remoção que seja apropriada para sua workload.
- Alocar memória reservada: Para evitar problemas durante o failover ou o backup, é uma prática recomendada definir o parâmetro reserved_memory_percentage como pelo menos 25% para uso não relacionado a dados. Se não houver memória reservada suficiente para executar o failover ou o backup, ocorrerão problemas de permuta e de desempenho.
- Use o agrupamento de conexões: O agrupamento de conexões permite controlar o alto número de novas conexões que são tentadas pelo cliente Redis. Para obter mais informações, consulte Quais são as práticas recomendadas para clientes Redis e ElastiCache para Redis?
- Configurar um tempo limite de inatividade no lado do servidor: Conexões abertas consomem memória e o uso aumenta com o tempo, independentemente de o cliente enviar ou não solicitações ao ElastiCache para Redis. Para minimizar o uso desnecessário de memória por conexões ociosas, configure o tempo limite no lado do servidor por meio do grupo de parâmetros para fechar conexões ociosas após um período de tempo especificado. Para evitar o fechamento antecipado de conexões, defina o valor do tempo limite de inatividade do lado do servidor maior do que o tempo limite do lado do cliente na biblioteca do cliente.
- Ajuste os limites de tamanho do buffer de saída: Ajuste o limite do buffer de saída para controlar o uso do espaço do buffer. Grupos de parâmetros do ElastiCache for Redis incluem parâmetros que começam com client-output-buffer-limit para evitar o alto uso do buffer de saída do cliente. Esses parâmetros não têm um limite sugerido. Certifique-se de avaliar sua workload e escolher um valor apropriado para os limites do buffer de saída.
- Usar mapeamento de hash: O mapeamento de hash ajuda com estruturas de dados que têm um grande número de chaves. Além disso, para reduzir o espaço de memória em comparação com as tabelas de hash, use a codificação ziplist. Para obter mais informações, consulte Memory optimization no site do Redis. Observação: o mapeamento de hash é um comando complexo que pode causar um pico no uso do mecanismo Redis.
- Escalar o cluster: Se você tiver aumentado a pressão da memória em uma workload esperada, escale o cluster para diminuir a pressão da memória.
- Defina um alarme para o uso da memória: Para iniciar um alarme para o uso de memória que atinge um limite predefinido, use alarmes do CloudWatch. Ao criar um alarme do CloudWatch, use a métrica BytesUsedForCache ou DatabaseMemoryUsagePercentage.

Conteúdo relevante
- feita há 2 meses
- feita há 3 meses