Come risolvere i problemi di Cache Redis di AzureHow to troubleshoot Azure Redis Cache

Questo articolo include indicazioni per la risoluzione delle categorie seguenti di problemi di Cache Redis di Azure.This article provides guidance for troubleshooting the following categories of Azure Redis Cache issues.

Nota

Diversi passaggi per la risoluzione dei problemi illustrati in questa guida includono istruzioni per eseguire comandi di Redis e monitorare svariate metriche delle prestazioni.Several of the troubleshooting steps in this guide include instructions to run Redis commands and monitor various performance metrics. Per altre informazioni e istruzioni, vedere gli articoli della sezione Informazioni aggiuntive .For more information and instructions, see the articles in the Additional information section.

Risoluzione dei problemi lato clientClient side troubleshooting

Questa sezione illustra la risoluzione dei problemi che si verificano a causa di una condizione nell'applicazione client.This section discusses troubleshooting issues that occur because of a condition on the client application.

Utilizzo elevato di memoria nel clientMemory pressure on the client

ProblemaProblem

L'utilizzo elevato di memoria nel computer client causa tutti i tipi di problemi di prestazioni che possono ritardare l'elaborazione dei dati inviati tempestivamente dall'istanza di Redis.Memory pressure on the client machine leads to all kinds of performance problems that can delay processing of data that was sent by the Redis instance without any delay. Quando si verifica un utilizzo elevato di memoria, il sistema in genere deve restituire una pagina di dati dalla memoria fisica alla memoria virtuale su disco.When memory pressure hits, the system typically has to page data from physical memory to virtual memory which is on disk. Questo errore di pagina causa un rallentamento significativo del sistema.This page faulting causes the system to slow down significantly.

MisuraMeasurement

  1. Monitorare l'utilizzo della memoria nel computer per verificare che non superi la memoria disponibile.Monitor memory usage on machine to make sure that it does not exceed available memory.
  2. Monitorare il contatore delle prestazioni Page Faults/Sec .Monitor the Page Faults/Sec performance counter. Poiché la maggior parte dei sistemi presenterà alcuni errori di pagina anche durante il normale funzionamento, controllare i picchi in questo contatore delle prestazioni degli errori di pagina corrispondenti ai timeout.Most systems will have some page faults even during normal operation, so watch for spikes in this page faults performance counter which correspond with timeouts.

RisoluzioneResolution

Aggiornare il client a una dimensione maggiore della VM client con più memoria o esaminare i modelli di utilizzo della memoria per ridurre il consumo di memoria.Upgrade your client to a larger client VM size with more memory or dig into your memory usage patterns to reduce memory consuption.

Burst di trafficoBurst of traffic

ProblemaProblem

I burst di traffico combinati con impostazioni ThreadPool insufficienti possono causare ritardi nell'elaborazione dei dati già inviati dal server Redis, ma non ancora utilizzati sul lato client.Bursts of traffic combined with poor ThreadPool settings can result in delays in processing data already sent by the Redis Server but not yet consumed on the client side.

MisuraMeasurement

Monitorare il cambiamento delle statistiche ThreadPool nel corso del tempo usando un codice come questo.Monitor how your ThreadPool statistics change over time using code like this. È anche possibile esaminare il messaggio TimeoutException da StackExchange.Redis.You can also look at the TimeoutException message from StackExchange.Redis. Di seguito è fornito un esempio:Here is an example :

System.TimeoutException: Timeout performing EVAL, inst: 8, mgr: Inactive, queue: 0, qu: 0, qs: 0, qc: 0, wr: 0, wq: 0, in: 64221, ar: 0, 
IOCP: (Busy=6,Free=999,Min=2,Max=1000), WORKER: (Busy=7,Free=8184,Min=2,Max=8191)

Nel messaggio precedente sono presenti diversi problemi interessanti:In the above message, there are several issues that are interesting:

  1. Si noti che nella sezione IOCP e nella sezione WORKER è presente un valore Busy maggiore del valore Min.Notice that in the IOCP section and the WORKER section you have a Busy value that is greater than the Min value. Ciò significa che le impostazioni ThreadPool devono essere modificate.This means that your ThreadPool settings need adjusting.
  2. È anche possibile osservare in: 64221You can also see in: 64221. che indica che sono stati ricevuti 64211 byte a livello di socket kernel, che però non sono ancora stati letti dall'applicazione, ad esempio StackExchange.Redis.This indicates that 64211 bytes have been received at the kernel socket layer but haven't yet been read by the application (e.g. StackExchange.Redis). Ciò significa in genere che l'applicazione non legge i dati dalla rete con la stessa velocità con cui li invia il server.This typically means that your application isn't reading data from the network as quickly as the server is sending it to you.

RisoluzioneResolution

Configurare le impostazioni ThreadPool per essere certi che il pool di thread aumenterà rapidamente le prestazioni negli scenari di burst.Configure your ThreadPool Settings to make sure that your thread pool will scale up quickly under burst scenarios.

Utilizzo elevato della CPU clientHigh client CPU usage

ProblemaProblem

L'utilizzo elevato della CPU nel client indica che il sistema non riesce a gestire il lavoro che gli viene chiesto di eseguire.High CPU usage on the client is an indication that the system cannot keep up with the work that it has been asked to perform. Ciò significa che il client potrebbe non riuscire a elaborare tempestivamente una risposta da Redis anche se Redis ha inviato la risposta molto rapidamente.This means that the client may fail to process a response from Redis in a timely fashion even though Redis sent the response very quickly.

MisuraMeasurement

Monitorare l'utilizzo della CPU a livello di sistema tramite il portale di Azure o il contatore delle prestazioni associato.Monitor the System Wide CPU usage through the Azure Portal or through the associated performance counter. Prestare attenzione a non monitorare la CPU del processo perché un singolo processo può avere un utilizzo della CPU basso, ma contemporaneamente l'utilizzo della CPU di sistema complessiva può essere elevato.Be careful not to monitor process CPU because a single process can have low CPU usage at the same time that overall system CPU can be high. Cercare nell'utilizzo della CPU i picchi corrispondenti ai timeout.Watch for spikes in CPU usage that correspond with timeouts. Con un utilizzo elevato della CPU, è anche possibile osservare valori in: XXX elevati nei messaggi di errore TimeoutException, come illustrato nelle sezione Burst di traffico.As a result of high CPU, you may also see high in: XXX values in TimeoutException error messages as described in the Burst of traffic section.

Nota

StackExchange.Redis 1.1.603 e versioni successive includono la metrica local-cpu nei messaggi di errore TimeoutException.StackExchange.Redis 1.1.603 and later includes the local-cpu metric in TimeoutException error messages. Assicurarsi di usare la versione più recente del pacchetto NuGet StackExchange.Redis.Ensure you using the latest version of the StackExchange.Redis NuGet package. È importante avere la versione più recente perché i bug del codice vengono continuamente fissati per renderlo più solido in caso di timeout.There are bugs constantly being fixed in the code to make it more robust to timeouts so having the latest version is important.

RisoluzioneResolution

Eseguire l'aggiornamento a una dimensione maggiore della VM con più capacità di CPU o verificare la causa dei picchi della CPU.Upgrade to a larger VM size with more CPU capacity or investigate what is causing CPU spikes.

Larghezza di banda lato client superataClient side bandwidth exceeded

ProblemaProblem

Esistono limitazioni alla quantità di larghezza di banda disponibile per computer client con dimensioni diverse.Different sized client machines have limitations on how much network bandwidth they have available. Se il client supera la larghezza di banda disponibile, i dati non verranno elaborati sul lato client con la stessa velocità con cui il server li invia.If the client exceeds the available bandwidth, then data will not be processed on the client side as quickly as the server is sending it. Ciò può causare un timeout.This can lead to timeouts.

MisuraMeasurement

Monitorare il cambiamento dell'utilizzo della larghezza di banda nel corso del tempo usando un codice come questo.Monitor how your Bandwidth usage change over time using code like this. Si noti che non è possibile eseguire correttamente questo codice in alcuni ambienti con autorizzazioni con restrizioni (ad esempio, i siti Web Azure).Note that this code may not run successfully in some environments with restricted permissions (like Azure web sites).

RisoluzioneResolution

Aumentare le dimensioni della VM client o ridurre il consumo di larghezza di banda di rete.Increase Client VM size or reduce network bandwidth consumption.

Dimensioni elevate della richiesta/rispostaLarge Request/Response Size

ProblemaProblem

Una richiesta/risposta di grandi dimensioni può causare un timeout.A large request/response can cause timeouts. Si supponga, ad esempio, che il valore di timeout configurato nel client sia di 1 secondo.As an example, Suppose your timeout value configured on your client is 1 second. L'applicazione richiede due chiavi, ad esempio "A" e "B", nello stesso momento, usando la stessa connessione di rete fisica.Your application requests two keys (e.g. 'A' and 'B') at the same time (using the same physical network connection). La maggior parte dei client supporta il "pipelining" delle richieste, in modo che entrambe le richieste "A" e "B" vengano inviate in rete al server una dopo l'altra senza attendere le risposte.Most clients support "Pipelining" of requests, such that both requests 'A' and 'B' are sent on the wire to the server one after the other without waiting for the responses. Il server invierà le risposte nello stesso ordine.The server will send the responses back in the same order. Se la risposta "A" è di dimensioni piuttosto grandi, può usare la maggior parte del timeout per le richieste successive.If response 'A' is large enough it can eat up most of the timeout for subsequent requests.

L'esempio seguente illustra questo scenario.The following example demonstrates this scenario. In questo scenario le richieste "A" e "B" vengono inviate rapidamente, il server inizia a inviare rapidamente le risposte "A" e "B", ma a causa dei tempi di trasferimento dati, "B" si blocca dietro l'altra richiesta e si verifica il timeout anche se il server ha risposto rapidamente.In this scenario, Request 'A' and 'B' are sent quickly, the server starts sending responses 'A' and 'B' quickly, but because of data transfer times, 'B' get stuck behind the other request and times out even though the server responded quickly.

|-------- 1 Second Timeout (A)----------|
|-Request A-|
     |-------- 1 Second Timeout (B) ----------|
     |-Request B-|
            |- Read Response A --------|
                                       |- Read Response B-| (**TIMEOUT**)

MisuraMeasurement

Non è semplice risolvere questo problema.This is a difficult one to measure. Essenzialmente è necessario instrumentare il codice client per tenere traccia di richieste e risposte di grandi dimensioni.You basically have to instrument your client code to track large requests and responses.

RisoluzioneResolution

  1. Redis è ottimizzato per molti valori bassi, invece che per pochi valori elevati.Redis is optimized for a large number of small values, rather than a few large values. La soluzione migliore consiste nel dividere i dati in valori più bassi correlati.The preferred solution is to break up your data into related smaller values. Vedere il post in cui viene chiesto qual è l'intervallo di dimensioni dei valori ideale per Redis e se 100 KB sono troppi per una spiegazione dettagliata del perché siano preferibili valori più bassi.See the What is the ideal value size range for redis? Is 100KB too large? post for details around why smaller values are recommended.
  2. Aumentare le dimensioni della VM (per il client e per il server Cache Redis), per ottenere capacità di larghezza di banda maggiori, riducendo i tempi di trasferimento dati per le risposte più grandi.Increase the size of your VM (for client and Redis Cache Server), to get higher bandwidth capabilities, reducing data transfer times for larger responses. Si noti che una larghezza di banda maggiore solo sul server o solo sul client potrebbe non essere sufficiente.Note that getting more bandwidth on just the server or just on the client may not be enough. Misurare l'utilizzo della larghezza di banda e confrontarlo con le capacità delle dimensioni della VM attuali.Measure your bandwidth usage and compare it to the capabilities of the size of VM you currently have.
  3. Aumentare il numero di oggetti ConnectionMultiplexer usati ed eseguire il round robin delle richieste su connessioni diverse.Increase the number of ConnectionMultiplexer objects you use and round-robin requests over different connections.

Che cosa è successo ai dati in Redis?What happened to my data in Redis?

ProblemaProblem

Si era previsto di trovare determinati dati nell'istanza di Cache Redis di Azure, ma sembra che non sia così.I expected for certain data to be in my Azure Redis Cache instance but it didn't seem to be there.

RisoluzioneResolution

Vedere Che cosa è successo ai dati in Redis? per le possibili cause e risoluzioni.See What happened to my data in Redis? for possible causes and resolutions.

Risoluzione dei problemi lato serverServer side troubleshooting

Questa sezione illustra la risoluzione dei problemi che si verificano a causa di una condizione nel server di cache.This section discusses troubleshooting issues that occur because of a condition on the cache server.

Utilizzo elevato di memoria nel serverMemory Pressure on the server

ProblemaProblem

L'utilizzo elevato di memoria sul lato server causa tutti i tipi di problemi di prestazioni che possono ritardare l'elaborazione delle richieste.Memory pressure on the server side leads to all kinds of performance problems that can delay processing of requests. Quando si verifica un utilizzo elevato di memoria, il sistema in genere deve restituire una pagina di dati dalla memoria fisica alla memoria virtuale su disco.When memory pressure hits, the system typically has to page data from physical memory to virtual memory which is on disk. Questo errore di pagina causa un rallentamento significativo del sistema.This page faulting causes the system to slow down significantly. Le possibili cause di questo utilizzo elevato di memoria sono diverse:There are several possible causes of this memory pressure:

  1. Sono stati inseriti dati nella cache fino a esaurirne la capacità.You have filled the cache to full capacity with data.
  2. Redis sta osservando un'elevata frammentazione della memoria che molto spesso è causata dall'archiviazione di oggetti di grandi dimensioni, mentre Redis è ottimizzato per oggetti di piccole dimensioni. Vedere il post in cui viene chiesto qual è l'intervallo di dimensioni dei valori ideale per Redis e se 100 KB sono troppi per i dettagli.Redis is seeing high memory fragmentation - most often caused by storing large objects (Redis is optimized for a small objects - See the What is the ideal value size range for redis? Is 100KB too large? post for details).

MisuraMeasurement

Redis espone due metriche che consentono di identificare questo problema.Redis exposes two metrics that can help you identify this issue. La prima è used_memory e l'altra è used_memory_rss.The first is used_memory and the other is used_memory_rss. Queste metriche sono disponibili nel portale di Azure o tramite il comando Redis INFO.These metrics are available in the Azure Portal or through the Redis INFO command.

RisoluzioneResolution

È possibile apportare diverse modifiche che consentono di mantenere integro l'utilizzo della memoria:There are several possible changes that you can make to help keep memory usage healthy:

  1. Configurare un criterio per la memoria e impostare scadenze per le chiavi.Configure a memory policy and set expiration times on your keys. Si noti che questa risoluzione potrebbe non essere sufficiente in caso di frammentazione.Note that this may not be sufficient if you have fragmentation.
  2. Configurare un valore maxmemory-reserved abbastanza grande da compensare la frammentazione della memoria.Configure a maxmemory-reserved value that is large enough to compensate for memory fragmentation.
  3. Suddividere gli oggetti di grandi dimensioni memorizzati nella cache in oggetti correlati più piccoli.Break up your large cached objects into smaller related objects.
  4. Passare a una dimensione della cache maggiore.Scale to a larger cache size.
  5. Se si usa una cache Premium con il cluster Redis abilitato, è possibile aumentare il numero di partizioni.If you are using a premium cache with Redis cluster enabled you can increase the number of shards.

Utilizzo della CPU/carico del server elevatoHigh CPU usage / Server Load

ProblemaProblem

Un utilizzo elevato della CPU può significare che il lato client può non riuscire a elaborare tempestivamente una risposta da Redis anche se Redis ha inviato la risposta molto rapidamente.High CPU usage can mean that the client side can fail to process a response from Redis in a timely fashion even though Redis sent the response very quickly.

MisuraMeasurement

Monitorare l'utilizzo della CPU a livello di sistema tramite il portale di Azure o il contatore delle prestazioni associato.Monitor the System Wide CPU usage through the Azure Portal or through the associated performance counter. Prestare attenzione a non monitorare la CPU del processo perché un singolo processo può avere un utilizzo della CPU basso, ma contemporaneamente l'utilizzo della CPU di sistema complessiva può essere elevato.Be careful not to monitor process CPU because a single process can have low CPU usage at the same time that overall system CPU can be high. Cercare nell'utilizzo della CPU i picchi corrispondenti ai timeout.Watch for spikes in CPU usage that correspond with timeouts.

RisoluzioneResolution

Passare a un piano superiore per la cache con più capacità di CPU o verificare la causa dei picchi della CPU.Scale to a larger cache tier with more CPU capacity or investigate what is causing CPU spikes.

Larghezza di banda lato server superataServer Side Bandwidth Exceeded

ProblemaProblem

Esistono limitazioni alla quantità di larghezza di banda disponibile per le istanze della cache con dimensioni diverse.Different sized cache instances have limitations on how much network bandwidth they have available. Se il server supera la larghezza di banda disponibile, i dati non verranno inviati al client altrettanto rapidamente.If the server exceeds the available bandwidth, then data will not be sent to the client as quickly. Ciò può causare un timeout.This can lead to timeouts.

MisuraMeasurement

È possibile monitorare la metrica Cache Read , ovvero la quantità di dati letti dalla cache in megabyte al secondo (MB/s) durante l'intervallo di report specificato.You can monitor the Cache Read metric, which is the amount of data read from the cache in Megabytes per second (MB/s) during the specified reporting interval. Questo valore corrisponde alla larghezza di banda della rete usata da questa cache.This value corresponds to the network bandwidth used by this cache. Per configurare avvisi per i limiti della larghezza di banda della rete lato server, è possibile crearli usando questo contatore Cache Read .If you want to set up alerts for server side network bandwidth limits, you can create them using this Cache Read counter. Confrontare le letture con i valori in questa tabella per i limiti della larghezza di banda osservati nei diversi piani tariffari e nelle varie dimensioni della cache.Compare your readings with the values in this table for the observed bandwidth limits for various cache pricing tiers and sizes.

RisoluzioneResolution

Se si è quasi sempre vicini alla larghezza di banda massima osservata per il piano tariffario e le dimensioni della cache, considerare la possibilità di passare a un piano tariffario o a dimensioni con un piano tariffario di rete maggiore, usando i valori di questa tabella come riferimento.If you are consistently near the observed maximum bandwidth for your pricing tier and cache size, consider scaling to a pricing tier or size that has greater network bandwidth, using the values in this table as a guide.

Eccezioni di timeout di StackExchange.RedisStackExchange.Redis timeout exceptions

StackExchange.Redis usa un'impostazione di configurazione denominata synctimeout per le operazioni sincrone, che ha un valore predefinito di 1000 ms.StackExchange.Redis uses a configuration setting named synctimeout for synchronous operations which has a default value of 1000 ms. Se una chiamata sincrona non viene completata nel tempo stabilito, il client StackExchange.Redis genera un errore di timeout simile all'esempio seguente.If a synchronous call doesn’t complete in the stipulated time, the StackExchange.Redis client throws a timeout error similar to the following example.

System.TimeoutException: Timeout performing MGET 2728cc84-58ae-406b-8ec8-3f962419f641, inst: 1,mgr: Inactive, queue: 73, qu=6, qs=67, qc=0, wr=1/1, in=0/0 IOCP: (Busy=6, Free=999, Min=2,Max=1000), WORKER (Busy=7,Free=8184,Min=2,Max=8191)

Questo messaggio di errore contiene metriche che consentono di trovare la causa e la possibile risoluzione del problema.This error message contains metrics that can help point you to the cause and possible resolution of the issue. La tabella seguente contiene i dettagli delle metriche del messaggio di errore.The following table contains details about the error message metrics.

Metrica del messaggio di erroreError message metric DettagliDetails
instinst Nell'ultimo periodo di tempo sono stati eseguiti 0 comandi.In the last time slice: 0 commands have been issued
mgrmgr Il gestore socket sta eseguendo socket.select, ovvero sta chiedendo al sistema operativo di indicare un socket con operazioni da eseguire. In sostanza, il lettore non sta attivamente leggendo dalla rete perché non ritiene che ci siano operazioni da eseguire.The socket manager is performing socket.select which means it is asking the OS to indicate a socket that has something to do; basically: the reader is not actively reading from the network because it doesn't think there is anything to do
codaqueue In totale sono in corso 73 operazioni.There are 73 total in-progress operations
ququ 6 delle operazioni in corso sono nella coda degli elementi non inviati e non sono ancora state scritte nella rete in uscita.6 of the in-progress operations are in the unsent queue and have not yet been written to the outbound network
qsqs 67 delle operazioni in corso sono state inviate al server, ma non è ancora disponibile una risposta.67 of he in-progress operations have been sent to the server but a response is not yet available. La risposta può essere Not yet sent by the server o sent by the server but not yet processed by the client.The response could be Not yet sent by the server or sent by the server but not yet processed by the client.
qcqc 0 delle operazioni in corso hanno avuto risposta, ma non sono ancora state contrassegnate come completate perché sono in attesa del ciclo di completamento.0 of the in-progress operations have seen replies but have not yet been marked as complete due to waiting on the completion loop
wrwr C'è un writer attivo (che significa che le 6 richieste non inviate non verranno ignorate). Vengono indicati i byte per writer attivo.There is an active writer (meaning the 6 unsent requests are not being ignored) bytes/activewriters
iniziarein Non ci sono lettori attivi e sono disponibili zero byte da leggere nella scheda di interfaccia di rete. Vengono indicati i byte per lettore attivo.There are no active readers and zero bytes are available to be read on the NIC bytes/activereaders

Passaggi di verificaSteps to investigate

  1. Come procedura consigliata, verificare di usare il modello seguente per connettersi quando si usa il client StackExchange.Redis.As a best practice make sure you are using the following pattern to connect when using the StackExchange.Redis client.

    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
    {
        return ConnectionMultiplexer.Connect("cachename.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
    
    });
    
    public static ConnectionMultiplexer Connection
    {
        get
        {
            return lazyConnection.Value;
        }
    }
    

    Per altre informazioni, vedere Connettersi alla cache usando StackExchange.Redis.For more information, see Connect to the cache using StackExchange.Redis.

  2. Assicurarsi che Cache Redis di Azure e l'applicazione client siano nella stessa area di Azure.Ensure that your Azure Redis Cache and the client application are in the same region in Azure. È possibile ad esempio, che si verifichino timeout quando la cache è negli Stati Uniti orientali, ma il client è negli Stati Uniti occidentali e la richiesta non viene completata entro l'intervallo synctimeout oppure è possibile che si verifichino timeout quando si esegue il debug dal computer di sviluppo locale.For example, you might be getting timeouts when your cache is in East US but the client is in West US and the request doesn't complete within the synctimeout interval or you might be getting timeouts when you are debugging from your local development machine.

    È consigliabile avere la cache e il client nella stessa area di Azure.It’s highly recommended to have the cache and in the client in the same Azure region. Nel caso di uno scenario che include chiamate da più aree, è consigliabile impostare l'intervallo synctimeout su un valore maggiore dell'intervallo predefinito di 1000 ms includendo una proprietà synctimeout nella stringa di connessione.If you have a scenario that includes cross region calls, you should set the synctimeout interval to a value higher than the default 1000 ms interval by including a synctimeout property in the connection string. L'esempio seguente illustra un frammento della stringa di connessione alla cache StackExchange.Redis con un valore synctimeout di 2000 ms.The following example shows a StackExchange.Redis cache connection string snippet with a synctimeout of 2000 ms.

     synctimeout=2000,cachename.redis.cache.windows.net,abortConnect=false,ssl=true,password=...
    
  3. Assicurarsi di usare la versione più recente del pacchetto NuGet StackExchange.Redis.Ensure you using the latest version of the StackExchange.Redis NuGet package. È importante avere la versione più recente perché i bug del codice vengono continuamente fissati per renderlo più solido in caso di timeout.There are bugs constantly being fixed in the code to make it more robust to timeouts so having the latest version is important.
  4. Se nel server o nel client sono presenti richieste soggette a limitazioni di larghezza di banda, il completamento di queste richieste sarà più lungo e di conseguenza potrebbero verificarsi dei timeout.If there are requests that are getting bound by bandwidth limitations on the server or client, it will take longer for them to complete and thereby cause timeouts. Per verificare se il timeout è causato dalla larghezza di banda di rete nel server, vedere Larghezza di banda lato server superata.To see if your timeout is due to network bandwidth on the server, see Server side bandwidth exceeded. Per verificare se il timeout è causato dalla larghezza di banda di rete nel client, vedere Larghezza di banda lato client superata.To see if your timeout is due to client network bandwidth, see Client side bandwidth exceeded.
  5. Esistono limiti per la CPU nel server o nel client?Are you getting CPU bound on the server or on the client?

    • Controllare se esistono limiti per la CPU nel client che possono causare la mancata elaborazione della richiesta entro l'intervallo synctimeout , provocando così un timeout.Check if you are getting bound by CPU on your client which could cause the request to not be processed within the synctimeout interval, thus causing a timeout. Per controllare questo problema, passare a dimensioni maggiori per il client o distribuire il carico.Moving to a larger client size or distributing the load can help to control this.
    • Controllare se esistono limiti per la CPU nel server monitorando la metrica delle prestazioni della cache CPU.Check if you are getting CPU bound on the server by monitoring the CPU cache performance metric. Le richieste in arrivo mentre Redis è limitato dalla CPU possono causare il timeout di tali richieste.Requests coming in while Redis is CPU bound can cause those requests to timeout. Per risolvere il problema, è possibile distribuire il carico tra più partizioni in una cache Premium o eseguire l'aggiornamento a dimensioni o a un piano tariffario superiore.To address this you can distribute the load across multiple shards in a premium cache, or upgrade to a larger size or pricing tier. Per altre informazioni, vedere Larghezza di banda lato server superata.For more information, see Server Side Bandwidth Exceeded.
  6. Ci sono comandi la cui elaborazione nel server richiede molto tempo?Are there commands taking long time to process on the server? I comandi con esecuzione di lunga durata la cui elaborazione richiede molto tempo nel server Redis possono causare timeout.Long running commands that are taking long time to process on the redis-server can cause timeouts. Alcuni esempi di comandi con esecuzione di lunga durata sono mget con numeri di chiave elevati, keys * o script lua scritti in modo inadeguato.Some examples of long running commands are mget with large numbers of keys, keys * or poorly written lua scripts. È possibile connettersi all'istanza di Cache Redis di Azure usando il client redis-cli o usare la console Redis ed eseguire il comando SlowLog per verificare se sono presenti richieste che richiedono più tempo del previsto.You can connect to your Azure Redis Cache instance using the redis-cli client or use the Redis Console and run the SlowLog command to see if there are requests taking longer than expected. Il server Redis e StackExchange.Redis sono ottimizzati per numerose richieste di piccole dimensioni invece che per meno richieste di grandi dimensioni.Redis Server and StackExchange.Redis are optimized for many small requests rather than fewer large requests. Dividere i dati in blocchi più piccoli può facilitare le operazioni.Splitting your data into smaller chunks may improve things here.

    Per informazioni sulla connessione all'endpoint SSL di Cache Redis di Azure con redis-cli e stunnel, vedere il post di blog contenente l' Annuncio della versione di anteprima del provider di stato della sessione ASP.NET per Redis .For information on connecting to the Azure Redis Cache SSL endpoint using redis-cli and stunnel, see the Announcing ASP.NET Session State Provider for Redis Preview Release blog post. Per altre informazioni, vedere SlowLog.For more information, see SlowLog.

  7. Un carico del server Redis elevato può causare timeout.High Redis server load can cause timeouts. È possibile monitorare il carico del server monitorando la metrica delle prestazioni della cache Redis Server Load.You can monitor the server load by monitoring the Redis Server Load cache performance metric. Un carico del server pari a 100 (valore massimo) indica che il server Redis è stato occupato, senza tempo di inattività, a elaborare le richieste.A server load of 100 (maximum value) signifies that the redis server has been busy, with no idle time, processing requests. Per verificare se determinate richieste stanno esaurendo la capacità del server, eseguire il comando SlowLog, come descritto nel paragrafo precedente.To see if certain requests are taking up all of the server capability, run the SlowLog command, as described in the previous paragraph. Per altre informazioni, vedere Utilizzo della CPU/carico del server elevato.For more information, see High CPU usage / Server Load.
  8. Si sono verificati altri eventi sul lato client che potrebbero aver causato un problema di rete?Was there any other event on the client side that could have caused a network blip? Controllare nel client (Web, ruolo di lavoro o VM Iaas) se si è verificato un evento, ad esempio l'aumento o la riduzione del numero di istanze client o la distribuzione di una nuova versione del client o se è abilitato il ridimensionamento automatico. Nel test è stato scoperto che il ridimensionamento automatico o il passaggio a un piano superiore/inferiore può causare la perdita della connettività di rete per diversi secondi.Check on the client (web, worker role or an Iaas VM) if there was an event like scaling the number of client instances up or down, or deploying a new version of the client or auto-scale is enabled?In our testing we have found that autoscale or scaling up/down can cause outbound network connectivity can be lost for several seconds. Il codice StackExchange.Redis è resiliente a tali eventi ed eseguirà una nuova connessione.StackExchange.Redis code is resilient to such events and will reconnect. Durante la riconnessione può verificarsi il timeout delle richieste nella coda.During this time of re-connection any requests in the queue can time out.
  9. Si è verificato il timeout di una richiesta di grandi dimensioni che precedeva diverse richieste di piccole dimensioni a Cache Redis?Was there a big request preceding several small requests to the Redis Cache that timed out? Il parametro qs nel messaggio di errore indica quante richieste sono state inviate dal client al server, ma non hanno ancora elaborato una risposta.The parameter qs in the error message tells you how many requests were sent from the client to the server, but have not yet processed a response. Questo valore può continuare ad aumentare perché StackExchange.Redis usa una sola connessione TCP e può leggere solo una risposta per volta.This value can keep growing because StackExchange.Redis uses a single TCP connection and can only read one response at a time. Anche se si è verificato il timeout della prima operazione, l'invio dei dati al/dal server non viene arrestato e le altre richieste vengono bloccate finché la prima non viene completata, causando i timeout.Even though the first operation timed out, it does not stop the data being sent to/from the server, and other requests are blocked until this is finished, causing time outs. Una soluzione consiste nel ridurre al minimo la possibilità di timeout assicurandosi che la cache sia abbastanza grande per il carico di lavoro e dividendo i valori elevati in blocchi più piccoli.One solution is to minimize the chance of timeouts by ensuring that your cache is large enough for your workload and splitting large values into smaller chunks. Un'altra possibile soluzione consiste nell'usare un pool di oggetti ConnectionMultiplexer nel client e nello scegliere il ConnectionMultiplexer con il carico minore quando si invia una nuova richiesta.Another possible solution is to use a pool of ConnectionMultiplexer objects in your client, and choose the least loaded ConnectionMultiplexer when sending a new request. In questo modo si eviterà che un singolo timeout provochi il timeout anche delle altre richieste.This should prevent a single timeout from causing other requests to also timeout.
  10. Se si usa RedisSessionStateprovider, verificare di avere impostato correttamente il timeout per i tentativi.If you are using RedisSessionStateprovider, ensure you have set the retry timeout correctly. retrytimeoutInMilliseconds deve essere maggiore di operationTimeoutinMilliseonds. In caso contrario, non verranno effettuati nuovi tentativi.retrytimeoutInMilliseconds should be higher than operationTimeoutinMilliseonds, otherwise no retries will occur. Nell'esempio seguente retrytimeoutInMilliseconds è impostato su 3000.In the following example retrytimeoutInMilliseconds is set to 3000. Per altre informazioni, vedere Provider di stato della sessione ASP.NET per Cache Redis di Azure e How to use the configuration parameters of Session State Provider and Output Cache Provider (Come usare i parametri di configurazione del provider di stato della sessione e del provider di cache di output).For more information, see ASP.NET Session State Provider for Azure Redis Cache and How to use the configuration parameters of Session State Provider and Output Cache Provider.

  11. Controllare l'utilizzo della memoria nel server Cache Redis di Azure monitorando Used Memory RSS e Used Memory.Check memory usage on the Azure Redis Cache server by monitoring Used Memory RSS and Used Memory. Se è in uso un criterio di rimozione, Redis inizia a rimuovere le chiavi quando Used_Memory raggiunge le dimensioni della cache.If an eviction policy is in place, Redis starts evicting keys when Used_Memory reaches the cache size. Idealmente, Used Memory RSS deve essere solo di poco più elevato di Used memory.Ideally, Used Memory RSS should be only slightly higher than Used memory. Una grande differenza indica la frammentazione della memoria (interna o esterna).A large difference means there is memory fragmentation (internal or external. Quando Used Memory RSS è minore di Used Memory, significa che il sistema operativo ha effettuato lo swapping di parte della memoria della cache.When Used Memory RSS is less than Used Memory, it means part of the cache memory has been swapped by the operating system. In questo caso, possono verificarsi alcune latenze significative.If this occurs you can expect some significant latencies. Poiché Redis non ha il controllo sull'esecuzione del mapping delle allocazioni alle pagine di memoria, un valore Used Memory RSS elevato è spesso il risultato di un picco nell'utilizzo della memoria.Because Redis does not have control over how its allocations are mapped to memory pages, high Used Memory RSS is often the result of a spike in memory usage. Quando Redis libera la memoria, la memoria viene restituita all'allocatore che può restituire o meno la memoria al sistema.When Redis frees memory, the memory is given back to the allocator, and the allocator may or may not give the memory back to the system. Può esistere una discrepanza tra il valore Used Memory e l'utilizzo di memoria segnalato dal sistema operativo,There may be a discrepancy between the Used Memory value and memory consumption as reported by the operating system. che può essere dovuta al fatto che la memoria è stata usata e rilasciata da Redis, ma non restituita al sistemaIt may be due to the fact memory has been used and released by Redis, but not given back to the system. Per ridurre i problemi di memoria, è possibile eseguire questa procedura.To help mitigate memory issues you can perform the following steps.

    • Aggiornare la cache a una dimensione maggiore per evitare di imbattersi in limitazioni della memoria nel sistema.Upgrade the cache to a larger size so that you are not running up against memory limitations on the system.
    • Impostare le scadenze per le chiavi in modo che i valori meno recenti vengano rimossi in modo proattivo.Set expiration times on the keys so that older values are evicted proactively.
    • Monitorare la metrica della cache used_memory_rss .Monitor the the used_memory_rss cache metric. Quando questo valore si avvicina alle dimensioni della cache, è probabile che si inizino a notare problemi di prestazioni.When this value approaches the size of their cache, you are likely to start seeing performance issues. Distribuire i dati in più partizioni se si usa una cache Premium o eseguire l'aggiornamento a una cache di dimensioni superiori.Distribute the data across multiple shards if you are using a premium cache, or upgrade to a larger cache size.

    Per altre informazioni, vedere Utilizzo elevato di memoria nel server.For more information, see Memory Pressure on the server.

Informazioni aggiuntiveAdditional information