Come posso controllare l'utilizzo della memoria nel mio cluster autoprogettato da ElastiCache per Redis e implementare le best practice per controllare l'uso elevato della memoria?
Desidero controllare l'utilizzo della memoria nel mio cluster autoprogettato da Amazon ElastiCache per Redis e implementare le best practice per controllare l'utilizzo elevato della memoria.
Breve descrizione
Le seguenti sono le cause dell'elevato utilizzo della memoria nel cluster autoprogettato da ElastiCache per Redis:
- **Chiavi aggiunte di recente:**Le coppie chiave-valore aggiuntive causano un aumento dell'utilizzo della memoria. Inoltre, elementi aggiuntivi sulle chiavi già esistenti causano un aumento dell'utilizzo della memoria. Per identificare le modifiche recenti ai dati su un nodo, controlla la metrica SetTypeCmds. Per ulteriori informazioni, consulta il comando commandstats nella pagina INFO del sito Web Redis.
- Aumento dell'utilizzo del buffer: I client sono connessi a Redis tramite la rete. Se il client, che include i client Pub/Sub, non legge dalla cache abbastanza velocemente, Redis conserva i dati di risposta nel buffer di output del client. Per ulteriori informazioni, consulta Redis Pub/Sub e Limiti del buffer di output e sul sito Web di Redis. Se c'è un collo di bottiglia nella larghezza di banda della rete o il cluster è continuamente sottoposto a un carico elevato, l'utilizzo del buffer potrebbe accumularsi. Ciò comporta l'esaurimento della memoria e il degrado delle prestazioni. Per impostazione predefinita, ElastiCache per Redis non limita la crescita del buffer di output e ogni client ha il proprio buffer. Per controllare l'utilizzo del buffer, usa il comando lista del client. Per ulteriori informazioni, consulta LISTA DEL CLIENT sul sito Web Redis.
- Numero elevato di nuove connessioni: Un numero elevato di nuove connessioni potrebbe aumentare l'utilizzo della memoria. Tutte le nuove connessioni creano un descrittore di file che consuma memoria e tale consumo di memoria aggregato potrebbe portare all'eliminazione dei dati o a errori OOM. Per visualizzare il numero di nuove connessioni, controlla la metrica NewConnections.
- Elevato utilizzo degli swap: È normale utilizzare degli swap su un nodo della cache quando c'è memoria libera. Tuttavia, un uso eccessivo degli swap potrebbe comportare una riduzione delle prestazioni. Un elevato utilizzo degli swap si verifica in un nodo sottoposto a una pressione di memoria elevata. Ciò si traduce in una scarsa memoria liberabile. Per monitorare lo swap sull'host, usa la metrica SwapUsage.
- Elevata frammentazione della memoria: L'elevata frammentazione della memoria indica inefficienze nella gestione della memoria del sistema operativo. Redis potrebbe non liberare memoria quando le chiavi vengono rimosse. Per monitorare il rapporto di frammentazione, utilizza la metrica MemoryFragmentationRatio. Se hai problemi di frammentazione, attiva il parametro activedefrag per la deframmentazione attiva della memoria.
- Chiavi grandi: Le chiavi grandi hanno una grande dimensione di dati o un numero elevato di elementi. Le chiavi di grandi dimensioni potrebbero causare un elevato utilizzo della memoria. Per rilevare le chiavi grandi nel tuo set di dati, usa il comando redis-cli --bigkeys o il comando redis-cli --memkeys. Per ulteriori informazioni, consulta Scansione per chiavi grandi e Scansione di chiavi sul sito Web Redis.
Risoluzione
Controlla l'utilizzo della memoria
Per verificare l'utilizzo della memoria nel cluster autoprogettato da ElastiCache per Redis, esamina le seguenti metriche Redis:
Nota: Queste metriche sono pubblicate in Amazon CloudWatch per ogni nodo di un cluster.
- BytesUsedForCache: Questo è il numero totale di byte allocati da Redis per tutti gli scopi. Questo valore viene utilizzato per determinare l'utilizzo della memoria di un cluster. Per recuperare questa metrica, esegui il comando INFO su un nodo Redis. Per ulteriori informazioni, consulta INFO sul sito Web di Redis.
- FreeableMemory: Si tratta di una metrica a livello di host che mostra la quantità di memoria libera disponibile sull'host. Se l'utilizzo della memoria aumenta a causa dei dati della cache o del sovraccarico, FreeableMemory diminuisce. Una diminuzione di FreeableMemory indica una quantità insufficiente di memoria sull'host. Lo scambio può avvenire quando FreeableMemory è troppo basso.
- DataBaseMemoryUsagePercentage: Questa è la percentuale di memoria utilizzata da un nodo del cluster. Quando questa metrica raggiunge il 100% della soglia, Redis avvia la politica di espulsione della memoria massima di Redis. Per ulteriori informazioni, vedi Espulsione delle chiavi sul sito Web di Redis. Per recuperare questa metrica, esegui il comando INFO su un nodo Redis. Per ulteriori informazioni, consulta INFO sul sito Web di Redis.
Nota: Per impostazione predefinita, ElastiCache riserva il 25% della maxmemory per l'utilizzo non relativo ai dati, come il failover e il backup. Se non si specifica una quantità sufficiente di memoria riservata per l'utilizzo non relativo ai dati, lo scambio potrebbe aumentare. Per ulteriori informazioni, consulta Gestione della memoria riservata.
Procedure consigliate per controllare l'uso elevato della memoria
- Usa TTL sulle chiavi: Per impedire l'archiviazione di chiavi non necessarie e rimuovere le chiavi che scadono, specifica il TTL sulle chiavi per la scadenza. Per ulteriori informazioni, consulta TTL sul sito Web di Redis. Se hai un numero elevato di espulsioni di chiave, il tuo nodo funziona con la pressione della memoria. Per evitare che le chiavi scadano nella stessa finestra temporale, aggiungi la casualità quando usi TTL.
- Utilizza una politica di espulsione: Quando la memoria cache si riempie, Redis rimuove le chiavi per liberare spazio in base alla maxmemory-policy. La policy maxmemory-policy predefinita è impostata su volatile_lru. È consigliabile scegliere una policy di espulsione appropriata per il carico di lavoro.
- Allocare memoria riservata: Per evitare problemi durante il failover o il backup, è consigliabile impostare il parametro reserved_memory_percentage su almeno il 25% per l'utilizzo non basato sui dati. Se la memoria riservata non è sufficiente per eseguire il failover o il backup, si verificano problemi di swap e prestazioni.
- Usa il pool di connessioni: Il pool di connessioni consente di controllare un numero elevato di nuove connessioni tentate dal client Redis. Per ulteriori informazioni, consulta How do I implement best practices for Redis clients and ElastiCache for Redis self-designed clusters?
- Configura un timeout di inattività lato server: Le connessioni aperte consumano memoria e l'utilizzo aumenta nel tempo, indipendentemente dal fatto che il client invii o meno richieste a ElastiCache per Redis. Per ridurre al minimo l'utilizzo non necessario della memoria da parte delle connessioni inattive, configura il timeout lato server tramite il gruppo di parametri per chiudere le connessioni inattive dopo un periodo di tempo specificato. Per evitare la chiusura anticipata delle connessioni, imposta il valore di timeout di inattività lato server più alto del timeout lato client all'interno della libreria client.
- Regola i limiti di dimensione del buffer di uscita: Regola il limite del buffer di uscita per controllare l'utilizzo dello spazio del buffer. I gruppi di parametri ElastiCache per Redis includono parametri che iniziano con client-output-buffer-limit per evitare un utilizzo elevato del buffer di output del client. Questi parametri non hanno un limite suggerito. Assicurati di confrontare il carico di lavoro e scegliere un valore appropriato per i limiti del buffer di uscita.
- Usa la mappatura degli hash: La mappatura degli hash aiuta con strutture di dati che hanno un numero elevato di chiavi. Inoltre, per ridurre l'ingombro di memoria rispetto alle tabelle hash, usa la codifica ziplist. Per ulteriori informazioni, consulta Ottimizzazione della memoria sul sito Web di Redis. Nota: la mappatura degli hash è un comando complesso che potrebbe causare un picco nell'utilizzo del motore Redis.
- Ridimensiona il cluster: Se la pressione della memoria è aumentata a causa di un carico di lavoro previsto, ridimensiona il cluster per ridurla.
- Imposta un allarme per l'utilizzo della memoria: Per attivare un allarme per l'utilizzo della memoria che raggiunge una soglia preimpostata, utilizza gli allarmi CloudWatch. Quando crei un allarme CloudWatch, utilizza la metrica BytesUsedForCache o DatabaseMemoryUsagePercentage.

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa