Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Come posso risolvere i problemi di latenza elevata in ElastiCache per Valkey o ElastiCache per Redis OSS?
Desidero risolvere i problemi di latenza elevata del mio cluster Amazon ElastiCache per Valkey o Amazon ElastiCache per Redis OSS.
Breve descrizione
Le cause più comuni dei problemi di latenza elevata nei cluster ElastiCache per Valkey o ElastiCache per Redis OSS sono le seguenti:
- Comandi lenti
- Maggiore attività di swap dovuta all'elevato utilizzo della memoria
- Problemi di rete
- Problemi di latenza lato client
- Sincronizzazione di Redis
- Eventi del cluster Amazon ElastiCache
Risoluzione
Comandi lenti
Poiché i cluster Valkey e Redis OSS sono a thread singolo, ElastiCache non può servire i client fino al completamento della richiesta corrente. Questo rallentamento comporta un aumento del tempo totale per le richieste e causa una latenza elevata.
Per monitorare la latenza media, puoi monitorare comandi specifici utilizzando le metriche di Amazon CloudWatch per Valkey e Redis. Per ulteriori informazioni, consulta Metriche per Valkey e Redis OSS.
Per recuperare un elenco di comandi che richiedono più di 10 ms per l'elaborazione da parte del motore, utilizza il comando SLOWLOG GET. Puoi connetterti al nodo interessato per eseguire il comando slowlog get 128 in valkey-cli.
Inoltre, ElastiCache calcola le operazioni Redis più comuni con una latenza di microsecondi. CloudWatch campiona le metriche ogni minuto e mostra le metriche di latenza come un aggregato di più comandi. Un singolo comando può causare problemi minori (ad esempio, timeout) senza che vi siano modifiche significative nei grafici delle metriche.
I comandi lenti che richiedono molto tempo per essere completati possono causare un maggiore utilizzo della CPU sul nodo ElastiCache. Se si verifica un aumento della metrica EngineCPUUtilization, consulta Come posso risolvere i problemi relativi all'aumento dell'utilizzo della CPU nel mio cluster autoprogettato ElastiCache per Redis?
Di seguito sono riportati alcuni esempi di comandi complessi che possono rallentare i cluster ElastiCache:
- Utilizzo del comando KEYS in ambienti di produzione con set di dati di grandi dimensioni: il comando KEYS scansiona l'intero spazio delle chiavi cercando i modelli specificati. Per ulteriori informazioni, consulta KEYS sul sito web di Valkey.
- Script Lua che richiedono molto tempo per essere eseguiti: a seconda della complessità di uno script o delle dimensioni di un set di dati, gli script Lua possono durare a lungo e causare problemi di latenza.
Maggiore attività di swap dovuta all'elevato utilizzo della memoria
Quando aumenta la pressione della memoria sul cluster, Redis scambia le pagine di memoria. Poiché le pagine di memoria vengono trasferite da e verso l'area di swap, lo swap può aumentare la latenza e causare timeout. I seguenti cambiamenti delle metriche di CloudWatch indicano un aumento dell'attività di swap:
- Aumento del valore SwapUsage
- Valore FreeableMemory basso
- Valori elevati delle metriche BytesUsedForCache e DatabaseMemoryUsagePercentage
Per risolvere i problemi relativi all'aumento dell'attività di swap, consulta i seguenti articoli:
- Come posso risolvere il problema dell'aumento dell'attività di scambio nelle istanze ElastiCache?
- Come posso controllare l'utilizzo della memoria nel mio cluster autoprogettato ElastiCache per Redis e implementare le best practice per controllare l'uso elevato della memoria?
Problemi di rete
I problemi di rete possono causare una latenza elevata per i cluster. A seconda del problema di rete riscontrato, completa le seguenti attività per risolvere i problemi di latenza elevata.
Latenza di rete tra il client e il cluster ElastiCache
Per ridurre la latenza tra il client e il cluster ElastiCache, puoi isolare la latenza di rete tra il client e i nodi del cluster. Per maggiori dettagli, consulta Come posso risolvere i problemi relativi alle prestazioni di rete tra le istanze EC2 Linux o Windows in un VPC e un host on-premises tramite il gateway Internet?
Raggiungimento dei limiti di rete da parte del cluster
Un nodo ElastiCache condivide gli stessi limiti di rete delle relative istanze Amazon Elastic Compute Cloud (Amazon EC2). Ad esempio, i limiti di rete per il tipo di nodo ElastiCache cache.m6g.large e l'istanza Amazon EC2 m6g.large sono gli stessi. Per ulteriori informazioni sui tipi di nodi ElastiCache supportati e sui limiti di larghezza di banda della rete, consulta Tipi di nodi supportati.
Per risolvere i limiti di rete dei nodi ElastiCache, consulta Limiti relativi alla rete.
Nota: è consigliabile monitorare le prestazioni della rete dell'istanza Amazon EC2, la capacità di larghezza di banda, le prestazioni in pacchetti per secondo (PPS) e le connessioni tracciate.
Latenza dell’handshake TCP/SSL
Quando i client si connettono a cluster Redis, possono essere necessari alcuni millisecondi per creare la connessione TCP. Durante questo periodo, il ritardo può comportare un'ulteriore sollecitazione a carico delle operazioni Redis e della CPU del nodo ElastiCache. Quando sono presenti molte nuove connessioni, tale sollecitazione può causare una latenza elevata della rete.
Per controllare il volume delle connessioni e ridurre la latenza, puoi memorizzare nella cache le connessioni TCP stabilite in un pool utilizzando un pool di connessioni. Per configurare un pool di connessioni, utilizza la libreria client Redis. In alternativa, puoi crearlo manualmente.
Per ottimizzare il pool di connessioni, puoi anche utilizzare comandi aggregati, come MSET o MGET, o pipeline Redis. Per ulteriori informazioni, consulta Redis pipelining (Pipeline Redis) sul sito web di Redis.
Numero elevato di connessioni sul nodo ElastiCache
Se è presente un numero elevato di connessioni TCP su un nodo ElastiCache, potresti raggiungere il limite maxclients. Quando raggiungi questo limite, ricevi un errore "ERR max number of clients reached" e potrebbero verificarsi timeout di connessione.
Per ridurre la latenza elevata, è consigliabile monitorare le metriche CurrConnections e NewConnections di CloudWatch. Puoi monitorare queste metriche per vedere il numero di connessioni TCP del nodo ElastiCache. Per risolvere i problemi derivanti dal raggiungimento del limite maxclients, consulta la sezione Large number of connections (Numero elevato di connessioni) in Best practices: Redis clients and Amazon ElastiCache for Redis (Best practice: client Redis e Amazon ElastiCache per Redis).
Problemi di latenza lato client
Se configuri le risorse client con valori di timeout troppo bassi, potresti ricevere errori di timeout. Per determinare se le risorse client causano problemi di latenza, controlla l'utilizzo della memoria, della CPU e della rete sul lato client. Se queste risorse sono vicine ai limiti, configura i valori di timeout lato client su un valore maggiore in modo che la risorsa possa rispondere.
Se l'applicazione viene eseguita su un'istanza Amazon EC2, puoi utilizzare le metriche di CloudWatch per approfondire ulteriormente i problemi. Oppure utilizza uno strumento di monitoraggio all'interno dell'istanza Amazon EC2, ad esempio atop o l’agente CloudWatch.
Per determinare se il client è la causa della latenza elevata, cerca i seguenti problemi:
- Controlla se i timeout si verificano frequentemente o in un momento specifico della giornata.
- Controlla se i timeout si verificano per un client specifico o per più client.
- Controlla se i timeout si verificano in uno specifico nodo Valkey o Redis o in più nodi.
- Verifica se i timeout si verificano in un cluster specifico o in più cluster.
Sincronizzazione di Redis
La sincronizzazione di Redis viene avviata in occasione di eventi di backup, sostituzione dei nodi e dimensionamento. Tale processo comporta un carico di lavoro che assorbe molte capacità di calcolo e, pertanto, può causare latenze.
Per verificare se una sincronizzazione ha influito sulle prestazioni del nodo, puoi controllare la metrica SaveInProgress in CloudWatch.
Nota: per ridurre al minimo gli effetti sul traffico degli utenti, è consigliabile pianificare gli eventi di sincronizzazione al di fuori degli orari di punta.
Eventi del cluster ElastiCache
Se il cluster ElastiCache è interessato da un evento, durante l'evento potresti riscontrare una latenza elevata. Puoi utilizzare la console ElastiCache per verificare la presenza di eventi durante il periodo di latenza. Verifica le attività in background, come la sostituzione dei nodi o eventi di failover derivanti da aggiornamenti dei servizi e manutenzione gestita di ElastiCache.
Se ritieni che la latenza elevata sia stata causata da problemi hardware, contatta il Supporto AWS.
Nota: puoi visualizzare le notifiche degli eventi pianificati sulla Dashboard AWS Health.
Esempio di log degli eventi:
Finished recovery for cache nodes 0001 Recovering cache nodes 0001 Failover from master node cluster_node to replica node cluster_node completed
Informazioni correlate
Monitoring best practices with Amazon ElastiCache for Redis using Amazon CloudWatch (Monitoraggio delle best practice con Amazon ElastiCache per Redis utilizzando Amazon CloudWatch)
- Argomenti
- Database
- Lingua
- Italiano
