Problemen met Azure Cache voor Redis aan clientzijde oplossen

In deze sectie worden problemen besproken die zich voordoen als gevolg van een voorwaarde op de Redis-client die door uw toepassing wordt gebruikt.

Geheugendruk op Redis-client

Geheugendruk op de clientmachine leidt tot allerlei prestatieproblemen die de verwerking van reacties uit de cache kunnen vertragen. Wanneer de geheugendruk toeslaat, kan het systeem gegevens naar de schijf pagina's. Deze paginafout zorgt ervoor dat het systeem aanzienlijk wordt vertraagd.

Geheugendruk op de client detecteren:

  • Controleer het geheugengebruik op de computer om ervoor te zorgen dat het beschikbare geheugen niet wordt overschreden.
  • Controleer de prestatiemeter van Page Faults/Sec de client. Tijdens de normale werking hebben de meeste systemen enkele paginafouten. Pieken in wisselbestandsfouten die overeenkomen met time-outs van aanvragen kunnen geheugenbelasting aangeven.

Hoge geheugendruk op de client kan op verschillende manieren worden beperkt:

  • Onderzoek uw geheugengebruikspatronen om het geheugenverbruik op de client te verminderen.
  • Upgrade uw client-VM naar een grotere grootte met meer geheugen.

Burst van verkeer

Bursts of traffic combined with poor settings can result in delays in processing data already sent by the Redis Server but not ThreadPool yet consumed on the client side.

Controleer hoe uw ThreadPool statistieken na een periode veranderen met behulp van een voorbeeld ThreadPoolLogger . U kunt berichten TimeoutException van StackExchange.Redis zoals hieronder gebruiken voor verder onderzoek:

    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)

In de voorgaande uitzondering zijn er verschillende problemen die interessant zijn:

  • U ziet dat u in IOCP de sectie en de sectie een waarde hebt die groter is dan de WORKER Busy Min waarde. Dit verschil betekent dat ThreadPool uw instellingen moeten worden aangepast.
  • U kunt ook in: 64221 zien. Deze waarde geeft aan dat er 64.211 bytes zijn ontvangen op de kernelsockelaag van de client, maar niet door de toepassing zijn gelezen. Dit verschil betekent meestal dat uw toepassing (bijvoorbeeld StackExchange.Redis) niet zo snel gegevens van het netwerk leest als de server deze naar u stuurt.

U kunt uw Instellingen ThreadPool om ervoor te zorgen dat uw threadpool snel omhoog wordt geschaald in burst-scenario's.

Hoog CPU-gebruik van client

Hoog CPU-gebruik van client geeft aan dat het systeem het werk dat is gevraagd om te doen niet kan bijhouden. Hoewel de cache het antwoord snel heeft verzonden, kan het zijn dat de client het antwoord niet tijdig verwerkt.

Controleer het systeembrede CPU-gebruik van de client met behulp van metrische gegevens die beschikbaar zijn in de Azure Portal of via prestatiemeters op de computer. Zorg ervoor dat u de proces-CPU niet bewaakt, omdat één proces een laag CPU-gebruik kan hebben, maar de systeembrede CPU kan hoog zijn. Kijk naar pieken in HET CPU-gebruik die overeenkomen met time-outs. Hoge CPU kan ook leiden tot hoge in: XXX waarden in TimeoutException foutberichten, zoals beschreven in de sectie Traffic burst.

Notitie

StackExchange.Redis 1.1.603 en hoger bevat de local-cpu metrische gegevens in TimeoutException foutberichten. Zorg ervoor dat u de nieuwste versie van het StackExchange.Redis NuGet-pakket gebruikt. Er worden voortdurend fouten in de code opgelost om de fout krachtiger te maken voor time-outs, dus het is belangrijk dat u de nieuwste versie hebt.

Om het hoge CPU-gebruik van een client te beperken:

  • Onderzoek wat de oorzaak is van CPU-pieken.
  • Upgrade uw client naar een grotere VM met meer CPU-capaciteit.

Bandbreedtebeperking aan clientzijde

Afhankelijk van de architectuur van clientmachines kunnen ze beperkingen hebben met betrekking tot de beschikbare netwerkbandbreedte. Als de client de beschikbare bandbreedte overschrijdt door overbelasting van de netwerkcapaciteit, worden gegevens aan de clientzijde niet zo snel verwerkt als de server deze verstuurt. Deze situatie kan leiden tot time-outs.

Controleer aan de hand van een voorbeeld hoe uw bandbreedtegebruik in de tijd verandert. BandwidthLogger Deze code kan mogelijk niet worden uitgevoerd in sommige omgevingen met beperkte machtigingen (zoals Azure-websites).

Verminder het verbruik van de netwerkbandbreedte of verhoog de grootte van de client-VM tot één met meer netwerkcapaciteit.

Hoge clientverbindingen

Clientverbindingen die het maximum voor de cache bereiken, kunnen leiden tot fouten in clientaanvragen voor verbindingen die het maximum te boven gaan, en kunnen ook een hoog CPU-gebruik van de server in de cache veroorzaken vanwege het verwerken van herhaalde pogingen om opnieuw verbinding te maken.

Hoge clientverbindingen kunnen duiden op een verbindingslek in clientcode. Verbindingen worden mogelijk niet opnieuw gebruikt of op de juiste manier gesloten. Controleer de clientcode op verbindingsgebruik.

Als de hoge verbindingen allemaal legitieme en vereiste clientverbindingen zijn, kan het nodig zijn om uw cache te upgraden naar een grootte met een hogere verbindingslimiet.

Aanvullende informatie