Práticas recomendadas de gestão de memória

Esta página explica a configuração da memória reservada para a sua instância do Memcached e quando aumentar a memória reservada, se necessário. Esta página também explica as outras práticas recomendadas que precisa de conhecer para gerir eficazmente a memória da sua instância do Memcached.

O Memorystore adiciona memória adicional à sua instância, que não é visível para si, para acomodar as despesas gerais criadas pelos processos do Memcached. No entanto, consoante a sua carga de trabalho específica, a sobrecarga de memória pode aumentar mais do que a memória adicional que disponibilizamos para este fim.

Quando a utilização da memória aumenta mais do que a memória total do sistema Memorystore, uma condição de falta de memória (OOM) pode causar uma limpeza total da cache de dados, o que pode interromper a sua aplicação e empresa.

As secções seguintes descrevem os princípios gerais a seguir quando configurar uma instância do Memorystore for Memcached. As secções também abordam as métricas e os alertas que pode usar para monitorizar a memória, bem como explicam as ações que pode realizar.

Conceitos de gestão de memória

Capacidade da instância

A capacidade da instância é a quantidade de memória que aprovisiona em GiB e pela qual lhe é faturado. A memória da cache não é igual à capacidade da instância porque não é fixa. No entanto, quando cria a instância do Memcached, a capacidade da instância é igual à memória da cache por predefinição.

Por exemplo, se escolher uma capacidade da instância de 5 GiB, por predefinição, a instância tem 5 GiB de espaço para armazenar itens.

Limite de memória da cache

A memória da cache é o tamanho total da memória disponível para utilização como cache pela sua instância do Memcached. Por predefinição, a memória da cache é igual à capacidade da instância. No entanto, ajustar a memória reservada pode reduzir a memória da cache. Para mais detalhes, consulte o artigo Memória reservada. Quando a memória da cache está cheia, o Memcached começa a remover itens armazenados na cache para libertar espaço para novas escritas.

Tenha em atenção que, quando visualiza a métrica de memória da cache, a memória da cache comunicada para um nó do Memcached inclui apenas o espaço ocupado por itens. Isto significa que o Memcached pode subestimar a utilização total da memória da cache. A cache pode alocar memória adicional como fragmentação nas placas.

Sobrecarga de memória

A sobrecarga de memória é a memória usada pelos processos do Memcached. Não inclui itens armazenados na memória para colocação em cache.

A sobrecarga de memória é dimensionada com base no número de ligações ativas, no total de itens e no tamanho dos itens. Além disso, a sobrecarga de memória é teoricamente ilimitada, pelo que tem o potencial de crescer infinitamente.

Para ter em conta a sobrecarga de memória, o Memorystore adiciona memória adicional à sua instância. No entanto, a quantidade de memória adicional que adicionamos não é visível para si. Para a maioria das cargas de trabalho, a sobrecarga de memória não deve ser problemática.

Sem qualquer configuração, a memória de um nó do Memorystore for Memcached vazio tem o aspeto do diagrama apresentado abaixo.

marcador de posição

À medida que a sua aplicação adiciona itens à cache, o Memcached acumula custos gerais para processos como buffers de ligação e a tabela de hash interna:

marcador de posição

Uma vez que o crescimento da sobrecarga não tem limites, alguma sobrecarga para algumas cargas de trabalho cresce além do limite reservado, conforme se vê 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 tem de ser terminado pelo SO, o que provoca uma limpeza total da cache:

marcador de posição

Pode observar que a sobrecarga de memória cresce além do espaço adicional que o Memorystore atribui à sobrecarga por predefinição (conforme indicado pela elevada utilização da memória do sistema). Nestas circunstâncias, aumente o parâmetro de memória reservada para criar uma sobrecarga adicional para a sua carga de trabalho.

Memória reservada

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

Para aumentar a memória disponível para a sobrecarga de memória, aumenta a memória reservada, o que reduz a memória da cache disponível. Deve adicionar este espaço adicional se a sua instância sofrer pressão da memória causada por uma sobrecarga de memória elevada.

As instâncias criadas após 25 de outubro de 2021 têm uma percentagem de memória reservada predefinida de 10%. Este valor pode ser substituído atualizando manualmente a configuração na sua instância. Diminuir a memória reservada na sua instância pode aumentar significativamente a probabilidade de condições de OOM.

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

marcador de posição

Assim que a cache do Memcached atinge este limite reduzido, começa a remover itens.

marcador de posição

Assim que começar a usar a instância, consoante a métrica Utilização da memória do sistema, pode ter de aumentar a memória reservada na instância para suportar o pico de carga de trabalho.

Para mais detalhes, consulte o artigo Gerir a utilização da memória do sistema.

Utilização da memória do sistema

A memória do sistema é igual à capacidade da instância aprovisionada mais o espaço adicional que o Memorystore adiciona para a sobrecarga de memória.

A utilização da memória do sistema é uma métrica que mostra a percentagem 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 fundamental a monitorizar, uma vez que mostra o quão perto está de preencher completamente a memória do sistema disponível para a sua instância. À medida que a métrica de utilização da memória do sistema se aproxima dos 100%, é mais provável que a instância tenha uma condição de falta de memória. Para garantir que a instância tem memória suficiente para suportar a sua carga de trabalho, é importante ter sempre memória do sistema disponível suficiente.

Para cargas de trabalho que tentam preencher a cache na totalidade e dependem de remoções do Memcached para gerir os itens armazenados, deve esperar ver uma utilização de memória do sistema mais elevada e pode querer aumentar preventivamente a memória reservada para garantir que tem espaço suficiente para a sobrecarga.

Alertas de utilização da memória do sistema

Deve definir um alerta para receber uma notificação se a métrica Utilização da memória do sistema exceder 90%. Se a utilização da memória do sistema for elevada, deve continuar a monitorizar a métrica de utilização da memória do sistema mais atentamente e, se aumentar drasticamente, deve considerar tomar medidas para gerir a utilização da memória do sistema. Tomar medidas quando a utilização da memória do sistema atinge níveis elevados é importante porque lhe dá tempo para mitigar em vez de lidar com uma limpeza da cache causada por uma condição de falta de memória.

Política de despejo

O Memcached usa um algoritmo LRU otimizado para remover itens assim que preencherem a memória da cache. Para obter instruções sobre como desativar as remoções da cache, consulte o artigo Configurar instâncias do Memcached.

A monitorização de despejos mostra o número de chaves que o Memcached remove devido a limitações de tamanho. Os itens removidos devido ao prazo de validade não estão incluídos nesta métrica. Se estiver a ver um grande número de despejos, a expansão da instância pode resultar num aumento da taxa de acertos da cache.

Se as remoções não estiverem ativadas e a cache estiver completamente cheia, a definição de itens no servidor Memcached pode falhar.

Relação de resultados da cache

Deve monitorizar regularmente a métrica da taxa de acertos na cache para saber que percentagem de pesquisas de chaves são devolvidas com êxito pelas chaves na sua instância do Memcached. Em geral, uma taxa de acertos na cache mais elevada é melhor do que uma taxa de acertos na cache mais baixa, porque significa que a cache está a devolver mais pedidos de cache.

Deve tomar nota da taxa de acertos na cache antes de fazer alterações de configuração significativas, como ajustar a memória reservada, ajustar os TTLs das chaves ou dimensionar a instância. Em seguida, depois de modificar a instância, verifique novamente a taxa de acertos na cache para ver como a alteração afetou esta métrica.

Monitorizar a utilização de memória da sua instância

As seguintes métricas dão-lhe estatísticas sobre a utilização de memória da sua instância. Para saber como ver métricas e definir alertas, consulte o artigo Monitorizar instâncias do Memcached.

Métrica Endereço métrico completo
Memória de cache memcache.googleapis.com/node/cache_memory
Utilização da memória do sistema memcache.googleapis.com/node/memory/utilization
Proporção de acertos na cache memcache.googleapis.com/node/hit_ratio
Despejos memcache.googleapis.com/node/eviction_count

Gerir a utilização da memória do sistema

Se a sua instância estiver a sofrer pressão de memória ou a deparar-se com erros de falta de memória, siga os passos abaixo para resolver o problema:

  1. Valide uma condição de falta de memória.
  2. Aumente a memória reservada na sua instância.
  3. Expanda a instância.
  4. Defina TTLs em chaves voláteis.
  5. Elimine manualmente as chaves na sua instância.
  6. Se continuar a deparar-se com condições de falta de memória, contacte o apoio técnico da Google Cloud Platform.

Validar uma condição de falta de memória

Quando a sua instância atinge uma condição de OOM, o primeiro sinal é um reinício da instância. Para ver se um reinício é causado por uma condição de falta de memória, veja as métricas de Tempo de atividade e Utilização da memória do sistema.

Se a utilização da memória do sistema foi superior a 90% antes de o tempo de atividade descer para zero, isto significa que o reinício da instância foi provavelmente causado por uma condição de falta de memória.

Aumente a memória reservada

Aumentar a memória reservada cria mais espaço para a sobrecarga de memória. Isto é feito através da redução do limite de memória da cache da sua instância. Deve aumentar a memória reservada se a métrica de utilização da memória do sistema exceder 90%.

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

O aumento da memória reservada reduz a memória disponível para armazenar itens, o que faz com que a remoção de itens ocorra mais cedo. Isto pode diminuir a taxa de acertos da cache da instância. Os itens não são removidos se tiver as remoções desativadas.

Aumente a escala da instância

Siga as instruções em Dimensionar instâncias do Memcached para aumentar o número de nós. Se a sua aplicação estiver configurada para dividir as chaves pelos nós, isto aumenta o espaço de armazenamento de itens geral disponível para a sua aplicação e reduz o número de chaves armazenadas em cada nó individual.

Defina TTLs em chaves voláteis

Configure a sua aplicação para definir TTLs em chaves armazenadas no Memcached. Por predefinição, o Memcached verifica periodicamente se existem chaves expiradas e remove-as, libertando espaço no seu servidor e impedindo a alocação de memória da cache adicional.

Elimine manualmente as chaves na sua instância

Deve considerar eliminar chaves quando tiver problemas de memória. No entanto, uma vez que o Memcached de código aberto não liberta a memória atribuída anteriormente, a eliminação de chaves reduz apenas a probabilidade de entrar numa condição OOM. Reduz a probabilidade, uma vez que as novas escritas usam a memória vazia. O aumento da sobrecarga de memória pode continuar a causar uma condição de falta de memória porque a memória alocada anteriormente está dedicada ao armazenamento de itens e não é utilizável pela sobrecarga.