Warum sehe ich eine hohe oder steigende CPU-Auslastung in meinem ElastiCache-for-Redis-Cluster?

Letzte Aktualisierung: 26.07.2022

Ich sehe eine hohe oder steigende CPU-Auslastung in meinem Amazon-ElastiCache-für-Redis-Cluster. Wie kann ich dieses Problem beheben?

Kurzbeschreibung

Es gibt zwei Amazon-CloudWatch-CPU-Metriken für ElastiCache for Redis:

  • EngineCPUUtilization: Diese Metrik gibt die CPU-Auslastung des Redis-Engine-Threads an. Da es sich bei Redis um einen Singlethread handelt, empfiehlt es sich, die Metrik EngineCPUUlization für Knoten mit vier oder mehr vCPUs zu überwachen.
  • CPUUtilization: Diese Metrik zeigt den Prozentsatz der CPU-Auslastung für den gesamten Host an. Verwenden Sie für kleinere Knoten mit zwei oder weniger vCPUs die Metrik CPUUtilization, um die Cluster-Workload zu überwachen.

Auflösung

Hohe Engine-CPU-Auslastung

Im Folgenden sind häufige Gründe für eine hohe Engine-CPU-Auslastung aufgeführt:

  • Ein lang andauernder Befehl, der viel CPU-Zeit verbraucht: Befehle mit hoher Zeitkomplexität wie Schlüssel, hkeys, hgetall usw. verbrauchen eine höhere CPU-Zeit. Vorschläge zur Zeitkomplexität und zur Leistung jedes Befehl finden Sie unter Befehle auf der Website redis.io. Lua-Skripte (ausgeführt durch EVAL- oder EVALSHA-Redis-Befehle) sind eine atomare Operation in Redis. Alle Serveraktivitäten werden während der gesamten Laufzeit eines Lua-Skripts blockiert, was zu einer hohen Engine-CPU-Auslastung führt. Überprüfen Sie, ob Befehle mit langer Laufzeit oder ein langlaufendes Lua-Skript mit Redis Slow Log vorhanden sind.
  • Hohe Anzahl von Anforderungen: Überprüfen Sie die Befehlsstatistiken, um festzustellen, ob Befehlsausbrüche vorhanden sind oder ob die Latenz zunimmt. Sie können die Fehlerstatistik mithilfe von CloudWatch-Metriken wie GetTypeCmds oder HashBasedCmds überprüfen. Alternativ können Sie den Redis-Befehl info commandstats verwenden. Wenn Sie aufgrund der erwarteten Workload der Anwendung eine hohe Anzahl von Anforderungen sehen, sollten Sie eine Skalierung des Clusters in Betracht ziehen.
  • Sicherung und Replikation: Überprüfen Sie die Metrik SaveInProgress, um festzustellen, ob eine Sicherung oder Replikation stattfindet. Diese binäre Metrik gibt „1“ zurück, wenn eine Hintergrundspeicherung (vergabelt oder unvergabelt) ausgeführt wird. Die Metrik gibt „0“ zurück, wenn kein Speichern im Hintergrund ausgeführt wird. Stellen Sie sicher, dass genügend Arbeitsspeicher vorhanden ist, um einen Redis-Snapshot zu erstellen.
  • Hohe Anzahl neuer Verbindungen: Das Herstellen einer TCP-Verbindung ist ein rechenaufwändiger Vorgang, insbesondere bei TLS-fähigen Clustern. Eine hohe Anzahl neuer Clientverbindungsanforderungen in einem kurzen Zeitraum kann zu einer Erhöhung der Engine-CPU-Auslastung führen. Seit Redis 6.2 wurden Leistungsverbesserungen für TLS-fähige Cluster mit x86-Knotentypen mit mindestens acht vCPUs auf Graviton2-Knotentypen mit vier vCPUs oder mehr implementiert. Empfehlungen zum Umgang mit einer großen Anzahl von Verbindungen finden Sie unter Bewährte Methoden: Redis-Clients und Amazon ElastiCache for Redis (Amazon ElastiCache für Redis).
  • Bei hoher Anzahl von Bereinigungen: Redis entfernt Schlüssel gemäß dem Parameter maxmemory-policy. Die Räumung erfolgt, wenn der Cache nicht über genügend Speicher für neue Daten verfügt. Wenn das Räumungsvolumen hoch ist, erhöht sich die EngineCPU-Auslastung, da Redis damit beschäftigt ist, die Schlüssel zu entfernen. Das Bereinigungsvolumen kann mithilfe von CloudWatch-Metriken Bereinigungen überwacht werden. Wenn die Bereinigung hoch ist, skalieren Sie Ihren Cluster, indem Sie einen größeren Knotentyp verwenden, oder skalieren Sie ihn durch Hinzufügen weiterer Knoten auf.
  • Hohe Anzahl von Rücknahmen: Um Speicherplatz freizugeben, tastet Redis alle Schlüssel ab, die ihren Timeout-Ablauf erreicht haben, und löscht sie dann. Dieser Vorgang wird als „Rückgewinnung“ bezeichnet. Wenn es eine hohe Anzahl von Ablaufzeiten gibt, erhöht sich die Engine-CPU-Auslastung, da Redis damit beschäftigt ist, die Schlüssel zurückzugewinnen. Sie können die Anzahl der Schlüsselablaufereignisse mithilfe der CloudWatch-Metriken Rückgewinnung überwachen. Es ist eine bewährte Methode, dass Sie nicht zu viele Schlüssel gleichzeitig ablaufen lassen, indem Sie beispielsweise den Redis-Befehl EXPIREAT ausführen.

Weitere Informationen zur Problembehandlung bei hoher EngineCPUUtilization finden Sie unter Fehlerbehebung bei Verbindungen – CPU-Auslastung.

Hohe CPU-Auslastung

Im Folgenden sind häufige Gründe für eine hohe CPU-Auslastung aufgeführt:

  • Hoher Netzwerkverkehr oder Verbindungen: Überprüfen Sie die Optionen NewConnections, NetworkBytesIn, NetworkBytesOut, NetworkPacketsIn und NetworkPacketsOut CloudWatch-Messwerte.
  • Hohe Engine-CPU-Auslastung und asynchrone I/O, die von anderen Threads verarbeitet werden: Einzelheiten zur verbesserten E/A-Handhabung finden Sie unter Leistungssteigerung von Amazon ElastiCache mit Amazon-EC2-M5- und R5-Instances.
  • Kontinuierliche verwaltete Wartung und Service-Updates: Wartungs- und Service-Updates benötigen Rechenkapazität. Infolgedessen können Sie während dieser Ereignisse einen Anstieg der CPU-Auslastung feststellen. Überprüfen Sie das Wartungsfenster, um festzustellen, ob der Dorn mit dem Fenster übereinstimmt. Es ist eine bewährte Methode, das Wartungsfenster auf den Zeitpunkt der geringsten Nutzung einzustellen, um die Auswirkungen zu minimieren. Weitere Informationen finden Sie auf der Hilfeseite zur verwalteten Wartung und Service-Updates in Amazon ElastiCache.
  • Hohes Paging und Vorgänge wie Sicherung: Unzureichender Speicher auf dem Knoten kann dazu führen, dass der Kernel-Page-Out-Speicher tauscht. Wenn das Paging übermäßig ist, kann es zu einem Anstieg der CPU-Auslastung kommen. Wenn die Last auf dem Knoten bei Vorgängen wie Sicherung oder Skalierung hoch ist, kann es zu einer Erhöhung der CPU-Auslastung kommen. Empfehlungen zu Metriken zur Ermittlung der Ursache eines Anstiegs finden Sie unter Überwachen von bewährten Methoden mit Amazon ElastiCache für Redis mithilfe von Amazon CloudWatch.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?