Wie überprüfe ich die Speicherauslastung in meinem selbst entworfenen ElastiCache für Redis Cluster und implementiere bewährten Methoden zur Kontrolle einer hohen Speicherauslastung?

Lesedauer: 6 Minute
0

Ich möchte die Speicherauslastung in meinem selbst entworfenen Amazon ElastiCache für Redis Cluster überprüfen und bewährte Methoden implementieren, um eine hohe Speicherauslastung zu kontrollieren.

AaKurzbeschreibung

Im Folgenden sind die Ursachen für eine hohe Speicherauslastung in Ihrem selbst entworfenen ElastiCache für Redis Cluster aufgeführt:

  • **Kürzlich hinzugefügte Schlüssel:**Zusätzliche Schlüssel-Wert-Paare führen zu einer Erhöhung der Speichernutzung. Außerdem führen zusätzliche Elemente auf bereits vorhandenen Schlüsseln zu einer erhöhten Speichernutzung. Um die letzten Datenänderungen auf einem Knoten zu identifizieren, überprüfen Sie die Metrik SetTypeCmds. Weitere Informationen finden Sie im Befehl commandstats auf der INFO-Seite der Redis-Website.
  • **Erhöhung der Puffernutzung:**Die Clients sind über das Netzwerk mit Redis verbunden. Wenn der Client, einschließlich Pub/Sub-Clients, nicht schnell genug aus dem Cache liest, speichert Redis die Antwortdaten im Client-Ausgabepuffer.Weitere Informationen finden Sie unter Redis Pub/Sub und Output Buffer Limits und auf der Redis-Website. Wenn es einen Engpass bei der Netzwerkbandbreite gibt oder der Cluster ständig stark ausgelastet ist, kann sich die Puffernutzung ansammeln. Dies führt zu Speicherauslastung und Leistungseinbußen. Standardmäßig schränkt ElastiCache für Redis das Wachstum des Ausgabepuffers nicht ein, und jeder Client hat seinen eigenen Puffer. Verwenden Sie den Befehl client list, um die Pufferauslastung zu überprüfen. Weitere Informationen finden Sie unter CLIENT LIST auf der Redis-Website.
  • **Große Anzahl neuer Verbindungen:**Eine große Anzahl neuer Verbindungen kann die Speicherauslastung erhöhen. Alle neuen Verbindungen erstellen einen Dateideskriptor, der Speicher verbraucht, und dieser aggregierte Speicherverbrauch kann zu Datenlöschungen oder OOM-Fehlern führen. Um die Anzahl neuer Verbindungen anzuzeigen, überprüfen Sie die NewConnections-Metrik.
  • Hohe Swap-Nutzung: Es ist normal, auf einem Cache-Knoten Swap-Nutzung zu haben, wenn freier Speicher verfügbar ist. Eine zu hohe Swap-Nutzung kann jedoch zu einer verminderten Leistung führen. Eine hohe Swap-Nutzung tritt in einem Knoten auf, der unter hohem Speicherdruck steht. Dies führt zu wenig verfügbarem Speicher. Verwenden Sie die SwapUsage-Metrik, um den Swap auf dem Host zu überwachen.
  • **Hohe Speicherfragmentierung:**Eine hohe Speicherfragmentierung weist auf Ineffizienzen bei der Speicherverwaltung des Betriebssystems hin. Redis gibt möglicherweise keinen Speicher frei, wenn Schlüssel entfernt werden. Verwenden Sie die MemoryFragmentationRatio-Metrik, um das Fragmentierungsverhältnis zu überwachen. Wenn Sie Fragmentierungsprobleme haben, aktivieren Sie den Parameter activedefrag für die aktive Speicherdefragmentierung.
  • **Große Schlüssel:**Große Schlüssel haben eine große Datenmenge oder eine große Anzahl von Elementen. Große Schlüssel können zu einer hohen Speicherauslastung führen. Um große Schlüssel in Ihrem Datensatz zu erkennen, verwenden Sie den Befehl redis-cli --bigkeys oder den Befehl redis-cli --memkeys. Weitere Informationen finden Sie unter Scannen nach großen Schlüsseln und Scannen von Schlüsseln auf der Redis-Website.

Lösung

Überprüfen Sie die Speichernutzung

Um die Speicherauslastung in Ihrem selbst entworfenen ElastiCache für Redis Cluster zu überprüfen, überprüfen Sie die folgenden Redis-Metriken:
**Hinweis:**Diese Metriken werden in Amazon CloudWatch für jeden Knoten in einem Cluster veröffentlicht.

  • **BytesUsedForCache:**Dies ist die Gesamtzahl der Byte, die von Redis für alle Zwecke zugewiesen wurden. Dieser Wert wird verwendet, um die Speicherauslastung eines Clusters zu bestimmen. Um diese Metrik abzurufen, führen Sie den Befehl INFO auf einem Redis-Knoten aus. Weitere Informationen finden Sie unter INFO auf der Redis-Website.
  • **FreeableMemory:**Dies ist eine Metrik auf Host-Ebene, die die Menge an freiem Speicher anzeigt, die auf dem Host verfügbar ist. Wenn die Speicherauslastung aufgrund von Cache-Daten oder Overhead zunimmt, verringert sich FreeableMemory. Eine Verringerung von **FreeableMemory ** weist auf wenig Arbeitsspeicher auf dem Host hin. Swapping kann auftreten, wenn FreeableMemory zu niedrig ist.
  • **DataBaseMemoryUsagePercentage:**Dies ist der Prozentsatz des Speichers, der von einem Cluster-Knoten verwendet wird. Wenn diese Metrik 100 % ihres Schwellenwerts erreicht, leitet Redis die Redis-Maxmemory-Bereinigungsrichtlinie ein. Weitere Informationen finden Sie unter Schlüsselbereinigung auf der Redis-Website. Um diese Metrik abzurufen, führen Sie den Befehl INFO auf einem Redis-Knoten aus. Weitere Informationen finden Sie unter INFO auf der Redis-Website.

**Hinweis:**Standardmäßig reserviert ElastiCache 25 % des maximalen Speichers für andere Zwecke wie Failover und Backup. Wenn Sie nicht genügend reservierten Speicher für andere Zwecke als Daten angeben, nimmt das Swapping möglicherweise zu. Weitere Informationen finden Sie unter Reservierten Speicher verwalten.

Bewährte Methoden zur Kontrolle hoher Speicherauslastung

  • Verwenden Sie TTL für Schlüssel: Um das Speichern unnötiger Schlüssel zu verhindern und Schlüssel zu entfernen, die ablaufen, geben Sie TTL für Schlüssel an, damit sie ablaufen. Weitere Informationen finden Sie unter TTL auf der Redis-Website. Wenn Sie eine hohe Anzahl von Schlüsselbereinigungen haben, wird Ihr Knoten unter Speicherdruck betrieben. Um zu vermeiden, dass Schlüssel im selben Zeitfenster ablaufen, bringen Sie den Zufall ins Spiel, indem Sie TTL verwenden.
  • Verwenden Sie eine Bereinigungsrichtlinie: Wenn der Cache-Speicher voll ist, entfernt Redis Schlüssel, um Speicherplatz gemäß der maxmemory-policy freizugeben. Die Standardrichtlinie maxmemory-policy ist auf volatile_lru gesetzt. Es hat sich bewährt, eine Bereinigungsrichtlinie zu wählen, die Ihrer Workload entspricht.
  • Weisen Sie reservierten Speicher zu: Um Probleme beim Failover oder Backup zu vermeiden, empfiehlt es sich, den Parameter reserved_memory_percentage für Nichtdatennutzung auf mindestens 25 % festzulegen. Wenn nicht genügend reservierter Speicher für Failover oder Backups verfügbar ist, treten Swap- und Leistungsprobleme auf.
  • Verwenden Sie Verbindungspooling: Mithilfe von Verbindungspooling können Sie eine große Anzahl neuer Verbindungen kontrollieren, die vom Redis-Client versucht werden. Weitere Informationen finden Sie unter Was sind bewährte Methoden für Redis-Clients und ElastiCache for Redis?
  • Konfigurieren Sie ein serverseitiges Leerlauf-Timeout: Offene Verbindungen verbrauchen Speicher und die Nutzung nimmt mit der Zeit zu, unabhängig davon, ob der Client Anfragen an ElastiCache für Redis sendet oder nicht. Um eine unnötige Speicherauslastung durch inaktive Verbindungen zu minimieren, konfigurieren Sie das serverseitige Timeout mithilfe der Parametergruppe so, dass inaktive Verbindungen nach einem bestimmten Zeitraum geschlossen werden. Um ein vorzeitiges Schließen von Verbindungen zu vermeiden, setzen Sie den serverseitigen Timeout-Wert für Leerlauf höher als den clientseitigen Timeout in der Client-Bibliothek.
  • Passen Sie die Größenbeschränkungen für den Ausgabepuffer an: Passen Sie das Ausgangspufferlimit an, um die Nutzung des Pufferspeichers zu steuern. ElastiCache für Redis-Parametergruppen enthalten Parameter, die mit client-output-buffer-limit beginnen, um eine hohe Auslastung des Client-Ausgabepuffers zu vermeiden. Für diese Parameter gibt es kein empfohlenes Limit. Stellen Sie sicher, dass Sie Ihre Workload vergleichen und einen geeigneten Wert für Ihre Ausgabepuffergrenzen wählen.
  • Verwenden Sie Hash-Mapping: Hash-Mapping hilft bei Datenstrukturen, die eine große Anzahl von Schlüsseln haben. Verwenden Sie außerdem die Ziplist-Codierung, um den Speicherbedarf im Vergleich zu Hash-Tabellen zu reduzieren. Weitere Informationen finden Sie unter Speicheroptimierung auf der Redis-Website. Hinweis: Hash-Mapping ist ein komplexer Befehl, der zu einem Anstieg der Redis-Engine-Nutzung führen kann.
  • Skalieren Sie den Cluster: Wenn Sie bei einer erwarteten Workload einen erhöhten Speicherdruck haben, skalieren Sie den Cluster, um den Speicherdruck zu verringern.
  • Stellen Sie einen Alarm für die Speichernutzung ein: Verwenden Sie CloudWatch-Alarme, um einen Alarm auszulösen, wenn die Speichernutzung einen voreingestellten Schwellenwert erreicht. Wenn Sie einen CloudWatch-Alarm erstellen, verwenden Sie die Metrik BytesUsedForCache oder DatabaseMemoryUsagePercentage.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr