Best practice di gestione della memoria

Questa pagina spiega la configurazione della memoria riservata per l'istanza Memcached e quando aumentare la memoria riservata, se necessario. Questa pagina illustra anche le altre best practice che devi conoscere per gestire in modo efficace la memoria per la tua istanza Memcached.

Memorystore aggiunge memoria aggiuntiva all'istanza, che non è visibile, per gestire il sovraccarico creato dalle procedure Memcached. Tuttavia, a seconda del carico di lavoro specifico, l'overhead della memoria può essere superiore alla memoria aggiuntiva che eseguiamo per questo scopo.

Quando l'utilizzo della memoria supera la memoria totale del sistema Memorystore, una condizione di OOM (out of memory) può causare un aggiornamento completo della cache dei dati, che può interrompere l'applicazione e l'attività.

Le sezioni seguenti descrivono i principi generali da seguire per configurare un'istanza Memorystore per Memcached. Le sezioni illustrano anche le metriche e gli avvisi che puoi utilizzare per monitorare la memoria e spiegano le azioni che puoi intraprendere.

Concetti di gestione della memoria

Capacità istanza

La capacità dell'istanza è la quantità di memoria di cui esegui il provisioning in GiB e l'importo che ti viene addebitato. La memoria cache non è uguale alla capacità dell'istanza perché non è fissa. Tuttavia, quando crei l'istanza Memcached, la capacità dell'istanza è uguale alla memoria della cache per impostazione predefinita.

Ad esempio, se scegli una capacità dell'istanza di 5 GiB, per impostazione predefinita l'istanza dispone di 5 GiB di spazio per archiviare gli elementi.

Limite di memoria cache

La memoria cache è la dimensione totale della memoria disponibile per essere utilizzata come cache dalla tua istanza Memcached. Per impostazione predefinita, la memoria cache è uguale alla capacità dell'istanza. Tuttavia, la regolazione della memoria riservata può ridurre la memoria cache. Per maggiori dettagli, vedi Memoria riservata. Una volta che la memoria della cache è piena, Memcached inizia a eliminare gli elementi memorizzati al suo interno per fare spazio alle nuove scritture.

Tieni presente che quando visualizzi la metrica della memoria cache, la memoria cache registrata per un nodo Memcached include solo lo spazio occupato dagli elementi. Ciò significa che Memcached potrebbe sottostimare l'utilizzo totale della memoria cache. La cache potrebbe allocare memoria aggiuntiva come frammentazione all'interno dei blocchi.

Overhead della memoria

Il sovraccarico di memoria è la memoria utilizzata dai processi Memcached. Non include gli elementi memorizzati nella memoria per la memorizzazione nella cache.

Il sovraccarico di memoria varia in base al numero di connessioni attive, agli elementi totali e alle dimensioni degli elementi. Inoltre, il sovraccarico di memoria è teoricamente illimitato, quindi ha il potenziale per crescere all'infinito.

Per tenere conto dell'overhead della memoria, Memorystore aggiunge memoria aggiuntiva alla tua istanza. Tuttavia, la quantità di memoria aggiuntiva che aggiungiamo non è visibile. Per la maggior parte dei carichi di lavoro, l'overhead della memoria non dovrebbe essere problematico.

Senza alcuna configurazione, un Memorystore vuoto per la memoria del nodo Memcached ha il seguente aspetto.

segnaposto

Quando l'applicazione aggiunge elementi alla cache, Memcached accumula un overhead per processi come i buffer di connessione e la tabella hash interna:

segnaposto

Poiché la crescita dell'overhead è illimitata, l'overhead di alcuni carichi di lavoro aumenta oltre il limite riservato, come mostrato di seguito:

segnaposto

Quando l'overhead e gli elementi riempiono tutto lo spazio disponibile, Memcached esaurisce la memoria e il processo deve essere terminato dal sistema operativo, causando uno svuotamento completo della cache:

segnaposto

Potresti notare che il sovraccarico della memoria aumenta oltre lo spazio extra allocato da Memorystore per il sovraccarico per impostazione predefinita (come indicato dall'utilizzo elevato della memoria di sistema). In questo caso, aumenta il parametro Memoria riservata per creare un overhead aggiuntivo per il tuo carico di lavoro.

Memoria riservata

La memoria riservata è una configurazione di Memorystore che consente di aumentare la quantità di spazio disponibile per l'utilizzo dall'overhead della memoria.

Per aumentare la memoria disponibile per l'overhead della memoria, aumenta la memoria riservata, che riduce la memoria cache disponibile. Dovresti aggiungere questo spazio aggiuntivo se la tua istanza presenta una pressione sulla memoria causata da un overhead elevato della memoria.

Le istanze create dopo il 25 ottobre 2021 hanno una percentuale di memoria riservata predefinita del 10%. Questo valore può essere ignorato aggiornando manualmente la configurazione nell'istanza. La riduzione della memoria riservata nell'istanza può aumentare notevolmente la probabilità di condizioni di OOM.

Il diagramma seguente mostra un'istanza che ha creato spazio aggiuntivo per l'overhead della memoria aumentando la memoria riservata:

segnaposto

Una volta raggiunto questo limite ridotto, la cache Memcached inizia a eliminare gli elementi.

segnaposto

Una volta iniziata a utilizzare l'istanza, a seconda della metrica Utilizzo della memoria di sistema, potrebbe essere necessario aumentare la memoria riservata nell'istanza per supportare il carico di lavoro di picco.

Per maggiori dettagli, vedi Gestire l'utilizzo della memoria di sistema.

Utilizzo della memoria di sistema

La memoria di sistema è uguale alla capacità dell'istanza di cui è stato eseguito il provisioning più lo spazio aggiuntivo aggiunto da Memorystore per il sovraccarico di memoria.

L'utilizzo della memoria di sistema è una metrica che mostra la percentuale di tutta la memoria utilizzata (elementi archiviati più il sovraccarico della memoria) rispetto alla memoria di sistema. Si tratta di una metrica fondamentale da monitorare, perché ti mostra quanto manca per riempire completamente la memoria di sistema disponibile per l'istanza. Quando la metrica Utilizzo della memoria di sistema si avvicina al 100%, è più probabile che l'istanza presenti una condizione di OOM. Per assicurarti che l'istanza abbia memoria sufficiente per supportare il tuo carico di lavoro, è importante avere sempre a disposizione una quantità sufficiente di memoria di sistema.

Per i carichi di lavoro che tentano di riempire completamente la cache e si basano sull'espulsione di Memcached per gestire gli elementi archiviati, dovresti aspettarti un utilizzo della memoria di sistema più elevato e potresti voler aumentare in via preventiva la memoria riservata per assicurarti di avere spazio sufficiente per l'overhead.

Avvisi per l'utilizzo della memoria di sistema

Devi impostare un avviso per ricevere una notifica se la metrica Utilizzo della memoria di sistema supera il 90%. Se l'utilizzo della memoria di sistema è elevato, devi monitorare più da vicino la metrica Utilizzo della memoria di sistema e, se aumenta notevolmente, devi prendere provvedimenti per gestire l'utilizzo della memoria di sistema. È importante intervenire quando l'utilizzo della memoria di sistema raggiunge livelli elevati perché ti dà il tempo di adottare misure di mitigazione anziché gestire uno svuotamento della cache causato da una condizione OOM.

Norme sullo sfratto

Memcached utilizza un algoritmo LRU ottimizzato per eliminare gli elementi una volta che hanno riempito la memoria della cache. Per istruzioni su come disattivare l'espulsione dalla cache, consulta Configurare le istanze di Memcached.

Monitoraggio degli sgomberi mostra il numero di chiavi rimosse da Memcached a causa di limitazioni di dimensioni. Gli elementi rimossi a causa della scadenza del TTL non sono inclusi in questa metrica. Se noti un numero elevato di espulsioni, l'aumento della dimensione dell'istanza potrebbe comportare un aumento del rapporto di hit della cache.

Se le espulsioni non sono abilitate e la cache è completamente piena, l'impostazione degli elementi nel server Memcached potrebbe non riuscire.

Percentuale di hit della cache

Devi monitorare regolarmente la metrica del rapporto di hit della cache per sapere quale percentuale di ricerche delle chiavi viene restituita correttamente dalle chiavi nell'istanza Memcached. In generale, un rapporto di hit della cache più elevato è migliore di uno più basso perché significa che la cache restituisce più richieste di cache.

Prima di apportare modifiche significative alla configurazione, ad esempio modificare la memoria riservata, i TTL delle chiavi o eseguire il ridimensionamento dell'istanza, devi prendere nota del rapporto di hit della cache. Dopo aver modificato l'istanza, controlla di nuovo il rapporto di hit della cache per vedere l'impatto della modifica su questa metrica.

Monitoraggio dell'utilizzo della memoria dell'istanza

Le seguenti metriche forniscono informazioni sull'utilizzo della memoria dell'istanza. Per scoprire come visualizzare le metriche e impostare gli avvisi, consulta Monitorare le istanze Memcached.

Metrica Indirizzo metrico completo
Memoria cache memcache.googleapis.com/node/cache_memory
Utilizzo della memoria di sistema memcache.googleapis.com/node/memory/utilization
Rapporto hit cache memcache.googleapis.com/node/hit_ratio
Sfratto memcache.googleapis.com/node/eviction_count

Gestione dell'utilizzo della memoria di sistema

Se la tua istanza presenta una pressione sulla memoria o si verificano errori OOM, segui i passaggi riportati di seguito per risolvere il problema:

  1. Verificare una condizione di OOM.
  2. Aumenta la memoria riservata dell'istanza.
  3. Esegui l'upgrade dell'istanza.
  4. Imposta i TTL per le chiavi volatili.
  5. Elimina manualmente le chiavi nell'istanza.
  6. Se continui a riscontrare condizioni di OOM, contatta l'assistenza della piattaforma Google Cloud.

Verifica di una condizione di OOM

Quando l'istanza raggiunge una condizione di OOM, il primo segnale è un riavvio dell'istanza. Per verificare se un riavvio è causato da una condizione di OOM, visualizza le metriche Tempo di attività e Utilizzo della memoria di sistema.

Se l'utilizzo della memoria di sistema era superiore al 90% prima che il tempo di attività scendesse a zero, significa che il riavvio dell'istanza è stato probabilmente causato da una condizione di OOM.

Aumenta la memoria riservata

L'aumento della memoria riservata crea più spazio per l'overhead della memoria. Lo fa riducendo il limite di memoria cache dell'istanza. Devi aumentare la memoria riservata se la metrica Utilizzo della memoria di sistema supera il 90%.

Per istruzioni su come modificare la configurazione della memoria riservata, consulta Configurare le istanze Memcached.

L'aumento della memoria riservata riduce la memoria disponibile per l'archiviazione degli elementi, con conseguente espulsione degli elementi più rapidamente. Ciò può ridurre percentuale successi cache dell'istanza. Gli elementi non vengono espulsi se le espulsioni sono disattivate.

Esegui lo scale up dell'istanza

Segui le istruzioni riportate in Eseguire il ridimensionamento delle istanze Memcached per aumentare il numero di nodi. Se l'applicazione è configurata per suddividere le chiavi tra i nodi, aumenta lo spazio di archiviazione complessivo degli elementi disponibile per l'applicazione e si riduce il numero di chiavi memorizzate su ogni singolo nodo.

Impostare i TTL per le chiavi volatili

Configura l'applicazione in modo da impostare i TTL sulle chiavi memorizzate in Memcached. Per impostazione predefinita, Memcached controlla periodicamente la presenza di chiavi scadute e le rimuove, liberando spazio sul server e impedendo un'ulteriore allocazione della memoria della cache.

Eliminare manualmente le chiavi nell'istanza

Ti consigliamo di eliminare le chiavi quando hai problemi di memoria. Tuttavia, poiché Memcached open source non libera la memoria allocata in precedenza, l'eliminazione delle chiavi riduce solo la possibilità di entrare in una condizione di OOM. Riduce la probabilità perché le nuove scritture utilizzano la memoria vuota. L'aumento dell'overhead della memoria può ancora causare una condizione di OOM perché la memoria allocata in precedenza è dedicata allo stoccaggio degli elementi e non è utilizzabile dall'overhead.