Best practice di gestione della memoria

In questa pagina viene descritta 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 da conoscere per gestire in modo efficace la memoria per l'istanza Memcached.

Memorystore aggiunge ulteriore memoria all'istanza, che non è visibile a te, per gestire l'overhead creato dai processi Memcached. Tuttavia, a seconda del carico di lavoro specifico, l'overhead della memoria può crescere più della memoria aggiuntiva di cui eseguiamo il provisioning per questo scopo.

Quando l'utilizzo della memoria aumenta rispetto alla memoria totale del sistema Memorystore, una condizione di esaurimento della memoria (OOM) può causare uno svuotamento completo dei dati della cache, con conseguente interruzione dell'applicazione e dell'attività.

Le seguenti sezioni descrivono i principi generali da seguire per la configurazione di un'istanza di Memorystore for Memcached. Queste 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 quanto ti viene fatturato. La memoria cache non corrisponde alla capacità dell'istanza perché la memoria cache non è fissa. Tuttavia, quando crei l'istanza Memcached, per impostazione predefinita la capacità dell'istanza è uguale alla memoria della cache.

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

Limite memoria cache

La memoria cache è la dimensione totale di memoria disponibile per essere utilizzata come cache dall'istanza Memcached. Per impostazione predefinita, la memoria cache equivale alla capacità dell'istanza. Tuttavia, la regolazione della memoria riservata può ridurre la memoria cache. Per ulteriori dettagli, consulta Memoria riservata. Quando la memoria della cache è piena, Memcached inizia a rimuovere gli elementi archiviati nella cache per fare spazio alle nuove scritture.

Tieni presente che quando visualizzi la metrica della memoria cache, la memoria cache segnalata per un nodo Memcached include solo lo spazio occupato dagli elementi. Ciò significa che Memcached potrebbe sottostimare l'utilizzo totale della memoria cache. La memoria potrebbe essere allocata dalla cache come frammentazione all'interno degli lastre.

Overhead di memoria

L'overhead di memoria è la memoria utilizzata dai processi Memcached. Non include elementi archiviati in memoria per la memorizzazione nella cache.

L'overhead della memoria viene calcolato in base al numero di connessioni attive, agli elementi totali e alle dimensioni degli elementi. Inoltre, l'overhead della memoria è teoricamente illimitato, quindi ha il potenziale di crescere all'infinito.

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

Senza alcuna configurazione, la memoria di un nodo Memorystore for Memcached vuoto è simile al diagramma riportato di seguito.

segnaposto

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

segnaposto

Poiché la crescita dell'overhead non ha limiti, un determinato overhead per alcuni carichi di lavoro cresce oltre il limite riservato, come mostrato di seguito:

segnaposto

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

segnaposto

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

Memoria riservata

La memoria riservata è una configurazione dell'archivio memoria che consente di aumentare la quantità di spazio disponibile per essere utilizzata dall'overhead della memoria.

Per aumentare la memoria disponibile per evitare l'overhead di memoria, aumenti la memoria riservata, che riduce la memoria cache disponibile. Devi aggiungere questo spazio extra se l'istanza presenta una pressione di memoria causata da un overhead di memoria elevato.

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

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

segnaposto

Quando la cache di Memcached raggiunge questo limite ridotto, inizia a rimuovere gli elementi.

segnaposto

Dopo aver iniziato a utilizzare l'istanza, a seconda della metrica Utilizzo della memoria di sistema, potrebbe esserti richiesto di aumentare la memoria riservata nell'istanza per supportare il carico di lavoro di picco.

Per maggiori dettagli, consulta Gestione dell'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 che Memorystore aggiunge per l'overhead di memoria.

Utilizzo della memoria di sistema è una metrica che mostra la percentuale di tutta la memoria utilizzata (elementi archiviati più l'overhead di memoria) rispetto alla memoria di sistema. È una metrica fondamentale da monitorare perché mostra quanto manca per esaurire completamente la memoria di sistema disponibile per la tua istanza. Man mano che la metrica Utilizzo della memoria di sistema si avvicina al 100%, è più probabile che l'istanza subisca una condizione OOM. Per garantire che l'istanza disponga di memoria sufficiente per supportare il carico di lavoro, è importante avere sempre a disposizione una memoria di sistema sufficiente.

Per i carichi di lavoro che tentano di riempire completamente la cache e dipendono dalle rimozioni di Memcached per gestire gli elementi archiviati, dovresti notare un utilizzo della memoria di sistema maggiore e potresti voler aumentare preventivamente la memoria riservata per assicurarti di avere spazio sufficiente per l'overhead.

Avvisi sull'utilizzo della memoria di sistema

Imposta 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ù attentamente la metrica Utilizzo della memoria di sistema; inoltre, se aumenta drasticamente, dovresti prendere in considerazione la gestione dell'utilizzo della memoria di sistema. È importante intervenire quando l'utilizzo della memoria di sistema raggiunge livelli elevati perché ti dà tempo per risolvere il problema invece di occuparsi dello svuotamento della cache causato da una condizione OOM.

Norme relative all'eliminazione

Memcached utilizza un algoritmo LRU ottimizzato per rimuovere gli elementi una volta che hanno riempito la memoria cache. Per istruzioni sulla disabilitazione delle rimozioni della cache, consulta Configurazione delle istanze Memcached.

Monitoraggio delle rimozioni mostra il numero di chiavi che Memcached rimuove a causa dei limiti di dimensioni. Gli elementi rimossi a causa della scadenza TTL non sono inclusi in questa metrica. Se noti un numero elevato di rimozioni, lo scale up dell'istanza potrebbe comportare un aumento del rapporto di hit della cache.

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

Rapporto hit dalla cache

Dovresti monitorare regolarmente la metrica del rapporto tra hit della cache in modo da sapere quale percentuale di ricerche chiave vengono restituite correttamente dalle chiavi nell'istanza Memcached. In generale, un rapporto più elevato di hit della cache è meglio di un rapporto più basso di hit dalla cache, perché significa che la cache restituisce un numero maggiore di richieste di cache.

Devi prendere nota del rapporto tra i risultati della cache prima di apportare modifiche di grande portata alla configurazione, ad esempio modificare la memoria riservata, modificare i TTL delle chiavi o scalare l'istanza. Quindi, dopo aver modificato l'istanza, controlla di nuovo il rapporto tra hit della cache per vedere in che modo la modifica ha influito su questa metrica.

Monitorare l'utilizzo della memoria da parte dell'istanza

Le seguenti metriche forniscono informazioni sulla memoria utilizzata dall'istanza. Per informazioni su come visualizzare le metriche e impostare gli avvisi, consulta Monitoraggio delle istanze Memcached.

Metrica Indirizzo completo della metrica
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
Sfrazioni memcache.googleapis.com/node/eviction_count

Gestione dell'utilizzo della memoria di sistema

Se nella tua istanza si verificano problemi di memoria o si verificano errori OOM, segui i passaggi riportati di seguito per risolvere il problema:

  1. Verifica una condizione OOM.
  2. Aumenta la memoria riservata nella tua istanza.
  3. Fai lo scale up dell'istanza.
  4. Imposta i TTL sulle chiavi volatili.
  5. Elimina manualmente le chiavi sull'istanza.
  6. Se continui a riscontrare condizioni OOM, contatta l'assistenza della piattaforma Google Cloud.

Verifica di una condizione OOM

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

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

Aumenta memoria riservata

L'aumento della memoria riservata crea più spazio per l'overhead della memoria. A questo scopo, riduce 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 sulla configurazione della configurazione della memoria riservata, consulta Configurazione delle istanze Memcached

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

Fai lo scale up dell'istanza

Segui le istruzioni riportate in Scalabilità delle istanze Memcached per aumentare il numero di nodi. Se la tua applicazione è configurata per eseguire il partizionamento orizzontale delle chiavi tra i nodi, lo spazio di archiviazione complessivo degli elementi disponibile per l'applicazione viene aumentato e viene ridotto il numero di chiavi archiviate su ogni singolo nodo.

Imposta i TTL sulle chiavi volatili

Configura la tua applicazione per impostare i TTL sulle chiavi archiviate 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 cache.

Elimina manualmente le chiavi sull'istanza

Dovresti prendere in considerazione l'idea di eliminare i tasti quando hai difficoltà a memoria. Tuttavia, poiché Memcached open source non libera la memoria allocata in precedenza, l'eliminazione delle chiavi riduce semplicemente la possibilità di entrare in una condizione OOM. Riduce la possibilità che le nuove scritture utilizzino la memoria vuota. L'aumento dell'overhead della memoria può comunque causare una condizione OOM perché la memoria allocata in precedenza è dedicata all'archiviazione degli elementi e non è utilizzabile dall'overhead.