Práticas recomendadas para o gerenciamento de memória

Nesta página, explicamos a configuração de memória reservada para sua instância do Memcached e quando aumentar a memória reservada, se necessário. Nesta página, também explicamos as outras práticas recomendadas que você precisa conhecer para gerenciar a memória da sua instância do Memcached com eficiência.

O Memorystore adiciona memória extra à instância, o que não é visível para você. Assim, é possível acomodar a sobrecarga criada pelos processos do Memcached. No entanto, dependendo da sua carga de trabalho específica, a sobrecarga de memória pode aumentar maior que a memória extra que provisionamos para essa finalidade.

Quando o uso da memória cresce acima da memória total do sistema do Memorystore, uma condição de falta de memória (OOM, na sigla em inglês) pode causar uma limpeza completa do cache dos dados, o que pode interromper seu aplicativo e seus negócios.

As seções a seguir descrevem os princípios gerais a serem seguidos ao configurar uma instância do Memorystore para Memcached. As seções também abrangem as métricas e os alertas que podem ser usados para monitorar a memória e explicam as ações que podem ser realizadas.

Conceitos de gerenciamento de memória

Capacidade da instância

A capacidade da instância é a quantidade de memória provisionada em GiB e o que é cobrado. A memória de cache não é igual à capacidade da instância porque a memória de cache não é fixa. Porém, quando você cria a instância do Memcached, a capacidade da instância é igual à memória de cache por padrão.

Por exemplo, se você escolher uma capacidade de instância de 5 GiB, por padrão, a instância terá 5 GiB de espaço para armazenar itens.

Limite de memória em cache

Memória do cache é o tamanho total da memória disponível para ser usada como cache pela instância do Memcached. Por padrão, a memória do cache é igual à capacidade da instância. No entanto, o ajuste da memória reservada pode reduzir a memória em cache. Para mais detalhes, consulte Memória reservada. Quando a memória do cache está cheia, o Memcached começa a remover itens armazenados dentro do cache para liberar espaço para novas gravações.

Ao visualizar a métrica de memória de cache, a memória de cache relatada para um nó do Memcached inclui apenas o espaço ocupado por itens. Isso significa que o Memcached pode subestimar o uso total da memória em cache. A memória adicional pode ser alocada pelo cache como fragmentação dentro das placas.

Sobrecarga de memória

A sobrecarga de memória é a memória usada por processos do Memcached. Isso não inclui os itens armazenados na memória para armazenamento em cache.

A sobrecarga de memória é dimensionada com base no número de conexões ativas, no total de itens e no tamanho do item. Além disso, a sobrecarga de memória é teoricamente ilimitada, por isso tem o potencial de crescer infinitamente.

Para compensar a sobrecarga de memória, o Memorystore adiciona memória à instância. No entanto, a quantidade de memória extra que adicionamos não fica visível para você. Para a maioria das cargas de trabalho, a sobrecarga de memória não precisa ser problemática.

Sem nenhuma configuração, uma memória de nó vazia do Memorystore para Memcached é semelhante ao diagrama mostrado abaixo.

marcador de posição

Conforme o aplicativo adiciona itens ao cache, o Memcached acumula sobrecarga para processos como buffers de conexão e a tabela de hash interno:

marcador de posição

Como o crescimento da sobrecarga é ilimitado, algumas cargas de trabalho ultrapassam o limite reservado, como mostrado abaixo:

marcador de posição

Quando a sobrecarga e os itens preenchem todo o espaço disponível, o Memcached fica sem memória, e o processo precisa ser encerrado pelo SO, causando uma limpeza completa do cache:

marcador de posição

A sobrecarga de memória cresce além do espaço extra que o Memorystore aloca para sobrecarga por padrão, conforme indicado pela alta utilização de memória do sistema. Nessas circunstâncias, aumente o parâmetro de memória reservada para criar sobrecarga para sua carga de trabalho.

Memória reservada

A memória reservada é uma configuração do Memorystore que permite aumentar a quantidade de espaço disponível para ser usada pela sobrecarga da memória.

Para aumentar a memória disponível para sobrecarga de memória, você aumenta a memória reservada, o que reduz a memória de cache disponível. Adicione esse espaço extra se a instância sofrer pressão de memória causada por alta sobrecarga de memória.

As instâncias criadas após 25 de outubro de 2021 têm uma porcentagem padrão de memória reservada de 10%. Esse valor pode ser modificado atualizando manualmente a configuração na instância. Diminuir a memória reservada na instância pode aumentar consideravelmente a probabilidade de condições de OOM.

O diagrama abaixo mostra uma instância que criou espaço extra para sobrecarga de memória aumentando a memória reservada:

marcador de posição

Quando o cache do Memcached atingir esse limite reduzido, ele começará a remover itens.

marcador de posição

Dependendo da métrica de utilização da memória do sistema, talvez seja necessário aumentar a memória reservada na sua instância para oferecer suporte à carga de trabalho de pico.

Para mais detalhes, consulte Gerenciar o uso de memória do sistema.

Uso de memória do sistema

A memória do sistema é igual à capacidade provisionada da instância, além do espaço extra que o Memorystore adiciona para sobrecarga de memória.

A Utilização de memória do sistema é uma métrica que mostra a porcentagem de toda a memória usada (itens armazenados mais sobrecarga de memória) em comparação com a memória do sistema. É uma métrica essencial a ser monitorada, porque mostra o quanto você está perto de preencher completamente a memória disponível do sistema para a instância. À medida que a métrica de uso da memória do sistema se aproxima de 100%, é mais provável que a instância tenha uma condição de OOM. Para garantir que a instância tenha memória suficiente para atender à sua carga de trabalho, é importante sempre ter memória suficiente do sistema disponível.

Para cargas de trabalho que tentam preencher o cache por completo e depender de remoções do Memcached para gerenciar quais itens estão armazenados, espera-se um maior uso da memória do sistema, e é recomendável aumentar preventivamente a memória reservada para garantir que você tenha espaço suficiente para sobrecarga.

Alertas para uso de memória do sistema

Defina um alerta para receber uma notificação se a métrica de utilização de memória do sistema ultrapassar 90%. Se a taxa de uso da memória do sistema for alta, acompanhe de perto a métrica de uso da memória do sistema. Se ela aumentar drasticamente, considere realizar etapas para gerenciar o uso de memória do sistema. É importante realizar ações quando a utilização da memória do sistema atingir níveis altos. Assim, você tem tempo para reduzir, em vez de lidar com a limpeza do cache causada por uma condição OOM.

Política de remoção

O Memcached usa um algoritmo LRU otimizado para remover itens depois de preencher a memória de cache. Para instruções sobre como desativar remoções de cache, consulte Como configurar instâncias do Memcached.

O recurso Monitorar remoções mostra o número de chaves que o Memcached remove por limitações de tamanho. Os itens removidos devido à expiração do TTL não estão incluídos nessa métrica. Se houver um grande número de remoções, o escalonamento vertical da instância poderá aumentar a proporção de ocorrência em cache.

Se as remoções não estiverem ativadas e o cache estiver completamente cheio, a configuração de itens no servidor do Memcached poderá falhar.

Proporção de ocorrência em cache

É preciso monitorar regularmente a métrica de proporção de ocorrência em cache para saber a porcentagem de pesquisas de chaves retornadas por chaves na instância do Memcached. De modo geral, uma proporção maior de ocorrência em cache é melhor do que uma menor, porque isso significa que seu cache está retornando mais solicitações de cache.

Anote a proporção de ocorrência em cache antes de fazer grandes alterações de configuração, como ajustar a memória reservada, ajustar os TTLs da chave ou dimensionar a instância. Em seguida, depois de modificar a instância, verifique a proporção de ocorrência em cache novamente para ver como a alteração afetou essa métrica.

Como monitorar o uso de memória da sua instância

As métricas a seguir fornecem insights sobre o uso de memória da instância. Para saber como visualizar métricas e definir alertas, consulte Como monitorar instâncias do Memcache.

Métrica Endereço da métrica completa
Memória cache memcache.googleapis.com/node/cache_memory
Uso de memória do sistema memcache.googleapis.com/node/memory/utilization
Proporção de ocorrência em cache memcache.googleapis.com/node/hit_ratio
Remoções memcache.googleapis.com/node/eviction_count

Como gerenciar o uso de memória do sistema

Se a instância estiver com pressão de memória ou com erros de OOM, siga as etapas abaixo para resolver o problema:

  1. Verifique a condição de um OOM.
  2. Aumente a memória reservada na instância.
  3. Escalone verticalmente a instância.
  4. Defina a TTL de chaves voláteis.
  5. Exclua manualmente as chaves na instância.
  6. Se você ainda encontrar condições de OOM, entre em contato com o suporte do Google Cloud Platform.

Como verificar uma condição de OOM

Quando sua instância atinge uma condição de OOM, o primeiro sinal é uma reinicialização de instância. Para ver se uma reinicialização é causada por uma condição de OOM, veja as metrics de Tempo de atividade e Uso de memória do sistema.

Se o uso de memória do sistema for mais de 90% antes do tempo de atividade cair para zero, isso significa que a reinicialização da instância provavelmente foi causada por uma condição de OOM.

Aumentar memória reservada

O aumento de memória reservada cria mais espaço para sobrecarga de memória. Isso é feito reduzindo o limite de memória do cache da instância. Você precisará aumentar a memória reservada se a métrica "Utilização da memória do sistema" exceder 90%.

Para instruções sobre como ajustar a configuração da memória reservada, consulte Como configurar instâncias do Memcached.

O aumento da memória reservada reduz a memória disponível para armazenar itens, resultando na remoção mais rápida de itens. Isso pode diminuir a proporção de ocorrência em cache da instância. Os itens não serão removidos se estiverem desativados.

Escalonar verticalmente a instância

Siga as instruções em Como escalonar instâncias do Memcached para aumentar sua contagem de nós. Se o aplicativo estiver configurado para fragmentar as chaves nos nós, isso aumentará o espaço de armazenamento geral do item disponível e reduzirá o número de chaves armazenadas em cada nó individual.

Definir a TTL de chaves voláteis

Configure seu aplicativo para definir TTLs em chaves armazenadas no Memcached. Por padrão, o Memcached verifica periodicamente se há chaves expiradas e as remove, liberando espaço no seu servidor e evitando a alocação de memória em cache.

Excluir chaves manualmente na instância

Considere excluir as chaves quando a memória estiver sobrecarregada. No entanto, como o Memcached de código aberto não libera memória alocada anteriormente, a exclusão de chaves apenas reduz a chance de entrar em uma condição de OOM. Isso reduz a chance de novas gravações usarem a memória vazia. O aumento da sobrecarga de memória ainda pode causar uma condição de OOM porque a memória alocada anteriormente é dedicada a armazenar itens e não pode ser usada pela sobrecarga.