Best Practices für die Arbeitsspeicherverwaltung

Auf dieser Seite wird die Konfiguration von reserviertem Speicher für Ihre Memcache-Instanz erläutert. Außerdem erfahren Sie, wann Sie bei Bedarf reservierten Speicher erhöhen können. Auf dieser Seite werden auch weitere Best Practices zum effektiven Verwalten des Arbeitsspeichers für Memcache-Instanzen erläutert.

Memorystore fügt Ihrer Instanz zusätzlichen Speicher hinzu, der für Sie nicht sichtbar ist, um den von Memcache-Prozessen erstellten Aufwand zu berücksichtigen. Je nach benötigter Arbeitslast kann der Arbeitsspeicheraufwand jedoch größer werden als der zusätzliche Speicher, den wir zu diesem Zweck bereitstellen.

Wenn die Speichernutzung den Gesamtspeicher des Memorystore-Systems übersteigt, kann ein OOM-Zustand (Out of Memory) zu einem vollständigen Leeren des Caches führen, was Ihre Anwendung und Ihren Betrieb stören kann.

In den folgenden Abschnitten werden allgemeine Prinzipien beschrieben, die beim Konfigurieren einer Memorystore for Memcache-Instanz beachtet werden müssen. In den Abschnitten werden auch die Messwerte und Benachrichtigungen beschrieben, die Sie zum Überwachen des Arbeitsspeichers verwenden können. Außerdem werden die Maßnahmen erläutert, die Sie ergreifen können.

Konzepte zur Speicherverwaltung

Instanzkapazität

Die Instanzkapazität setzt sich aus der Größe des bereitgestellten Speichers in GiB und den Gebühren zusammen, die Ihnen in Rechnung gestellt werden. Cache-Speicher ist nicht mit Instanzkapazität identisch, da Cache-Speicher nicht festgelegt ist. Wenn Sie jedoch eine Memcache-Instanz erstellen, entspricht die Instanzkapazität standardmäßig dem Cache-Speicher.

Wenn Sie beispielsweise eine Instanzkapazität von 5 GiB wählen, verfügt Ihre Instanz standardmäßig über 5 GiB Speicherplatz für Elemente.

Cache-Arbeitsspeicherlimit

Der Cache-Arbeitsspeicher ist die Gesamtgröße des Arbeitsspeichers, der von Ihrer Memcached-Instanz als Cache verwendet werden kann. Standardmäßig entspricht der Cache-Arbeitsspeicher Ihrer Instanzkapazität. Durch das Anpassen von „Reservierter Speicher“ kann jedoch der Cache-Arbeitsspeicher reduziert werden. Weitere Informationen finden Sie unter Reservierter Arbeitsspeicher. Sobald der Cache-Speicher voll ist, beginnt Memcached, im Cache gespeicherte Elemente zu entfernen, um Platz für neue Schreibvorgänge zu schaffen.

Wenn Sie sich den Messwert für den Cache-Speicher ansehen, enthält der für einen Memcached-Knoten gemeldete Cache-Speicher nur den von Elementen belegten Speicherplatz. Das bedeutet, dass Memcached die gesamte Cache-Speichernutzung unterschätzen kann. Zusätzlicher Speicher kann vom Cache als Fragmentierung innerhalb der Slabs zugewiesen werden.

Arbeitsspeicheraufwand

Der Arbeitsspeicheraufwand ist Arbeitsspeicher, der von Memcache-Prozessen verwendet wird. Er umfasst keine Elemente, die für das Caching im Arbeitsspeicher gespeichert sind.

Der Arbeitsspeicheraufwand wird basierend auf der Anzahl der aktiven Verbindungen, der Gesamtzahl der Elemente und der Elementgröße skaliert. Außerdem ist der Arbeitsspeicheraufwand theoretisch unbegrenzt, sodass er auf unbestimmte Zeit wachsen kann.

Zur Berücksichtigung des Arbeitsspeicheraufwands fügt Memorystore Ihrer Instanz zusätzlichen Speicher hinzu. Die zusätzliche Menge an hinzugefügtem Arbeitsspeicher ist für Sie jedoch nicht sichtbar. Bei den meisten Arbeitslasten stellt der Arbeitsspeicheraufwand kein Problem dar.

Ohne Konfiguration sieht ein leerer Memorystore for Memcache-Knotenspeicher wie im folgenden Diagramm aus.

Platzhalter

Wenn Ihre Anwendung Elemente zum Cache hinzufügt, verursacht Memcache Aufwand für Prozesse wie Verbindungszwischenspeicher und die interne Hash-Tabelle:

Platzhalter

Da der Aufwand unbegrenzt ansteigt, erhöht sich der Aufwand für einige Arbeitslasten über das reservierte Limit hinaus:

Platzhalter

Wenn der Aufwand und die Elemente den gesamten verfügbaren Speicherplatz belegen, wird in Memcache der Arbeitsspeicher aufgebraucht und der Prozess muss vom Betriebssystem beendet werden, was eine vollständige Cache-Leerung verursacht:

Platzhalter

Sie werden möglicherweise feststellen, dass der Arbeitsspeicheraufwand über den zusätzlichen Bereich hinausgeht, den Memorystore für den Aufwand standardmäßig zuweist. Dies wird durch eine hohe Systemspeicherauslastung angegeben. In diesem Fall sollten Sie den Parameter "Reservierter Speicher" erhöhen, um zusätzlichen Aufwand für Ihre Arbeitslast zu erstellen.

Reservierter Arbeitsspeicher

Reservierter Speicher ist eine Memorystore-Konfiguration, mit der Sie den Speicherplatz erhöhen können, der für Arbeitsspeicheraufwand verfügbar ist.

Um den für Arbeitsspeicheraufwand verfügbaren Speicherplatz zu erhöhen, erhöhen Sie den reservierten Speicher. Dadurch wird der verfügbare Cache-Speicher reduziert. Fügen Sie diesen zusätzlichen Speicherplatz hinzu, wenn Ihre Instanz unter Speicherdruck steht, der durch hohen Arbeitsspeicheraufwand verursacht wird.

Für Instanzen, die nach dem 25. Oktober 2021 erstellt wurden, werden standardmäßig 10 % Speicherplatz reserviert. Um diesen Wert zu überschreiben, müssen Sie die Konfiguration der Instanz manuell aktualisieren. Wenn Sie den reservierten Speicher auf Ihrer Instanz verringern, kann dies die Wahrscheinlichkeit von OOM-Bedingungen erheblich steigern.

Das folgende Diagramm zeigt eine Instanz, die durch die Erhöhung des reservierten Speichers zusätzlichen Platz für den Speicheraufwand geschaffen hat:

Platzhalter

Sobald der Memcached-Cache dieses reduzierte Limit erreicht hat, beginnt er, Elemente zu löschen.

Platzhalter

Sobald Sie mit der Verwendung der Instanz beginnen, müssen Sie je nach dem Messwert Systemarbeitsspeicherauslastung möglicherweise den reservierten Speicher für Ihre Instanz erhöhen.

Weitere Informationen finden Sie unter Systemarbeitsspeichernutzung verwalten.

Systemarbeitsspeichernutzung

Der Systemspeicher entspricht der bereitgestellten Instanzkapazität plus dem zusätzlichen Speicherplatz, den Memorystore als Arbeitsspeicheraufwand hinzufügt.

Die Systemarbeitsspeicherauslastung ist ein Messwert, der Ihnen den Prozentsatz des gesamten verwendeten Speichers (gespeicherte Elemente und Speicheraufwand) im Vergleich zum Systemspeicher zeigt. Dieser Messwert ist von entscheidender Bedeutung, da er anzeigt, wie nahe Sie daran sind, den verfügbaren Systemspeicher für Ihre Instanz vollständig zu belegen. Wenn der Messwert für die Systemarbeitsspeicherauslastung 100 % erreicht, kommt es bei der Instanz wahrscheinlicher zu einer OOM-Bedingung. Damit die Instanz über genügend Arbeitsspeicher für die Arbeitslast verfügt, muss immer genügend Systemspeicher zur Verfügung zu haben.

Bei Arbeitslasten, die den Cache vollständig füllen und sich auf Memcached-Bereinigungen verlassen, um die Speicherung von Elementen zu verwalten, sollten Sie mit einer höheren Systemarbeitsspeicherauslastung rechnen und den reservierten Speicher präventiv erhöhen, um sicherzustellen, dass genügend Platz für den Aufwand vorhanden ist.

Benachrichtigungen für die Systemarbeitsspeicherauslastung

Sie sollten eine Benachrichtigung einrichten, die Sie informiert, wenn der Messwert für die Systemarbeitsspeicherauslastung 90 % überschreitet. Wenn die Systemarbeitsspeicherauslastung hoch ist, sollten Sie den Messwert „Systemarbeitsspeicherauslastung“ genauer beobachten. Wenn er drastisch ansteigt, sollten Sie Schritte zum Verwalten der Systemarbeitsspeichernutzung verwenden. Es ist wichtig, Maßnahmen zu ergreifen, wenn die Auslastung des Systemarbeitsspeichers ein hohes Niveau erreicht, da Sie dann Zeit haben, Abhilfemaßnahmen zu ergreifen, anstatt sich mit einer durch eine OOM-Bedingung verursachten Cache-Leerung zu befassen.

Bereinigungsrichtlinie

Memcache nutzt einen optimierten LRU-Algorithmus, um Elemente zu bereinigen, sobald sie den Cache-Speicher gefüllt haben. Eine Anleitung zum Deaktivieren von Cache-Bereinigungen finden Sie unter Memcache-Instanzen konfigurieren.

Unter Monitoring-Bereinigungen sehen Sie die Anzahl der Schlüssel, die Memcached aufgrund von Größenbeschränkungen entfernt hat. Elemente, die aufgrund des Ablaufs der TTL entfernt werden, sind in diesem Messwert nicht enthalten. Wenn viele Bereinigungen auftreten, kann das Hochskalieren der Instanz zu einer Erhöhung der Cache-Trefferquote führen.

Wenn Bereinigungen nicht aktiviert sind und der Cache voll ist, kann das Festlegen von Elementen auf Ihrem Memcache-Server fehlschlagen.

Cache-Trefferquote

Sie sollten den Messwert für die Cache-Trefferquote regelmäßig überwachen, damit Sie wissen, wie viele Schlüsselsuchen erfolgreich von Schlüsseln in Ihrer Memcached-Instanz zurückgegeben werden. Im Allgemeinen ist eine höhere Cache-Trefferquote besser als eine niedrigere Cache-Trefferquote, da Ihr Cache dann mehr Cache-Anfragen zurückgibt.

Notieren Sie sich die Cache-Trefferquote, bevor Sie größere Konfigurationsänderungen vornehmen, z. B. den reservierten Speicher anpassen, die Schlüssel-TTLs anpassen oder die Instanz skalieren. Überprüfen Sie dann nach der Änderung der Instanz die Cache-Trefferquote erneut, um zu sehen, wie sich die Änderung auf diesen Messwert ausgewirkt hat.

Speichernutzung Ihrer Instanz überwachen

Die folgenden Messwerte geben Ihnen einen Einblick in die Arbeitsspeichernutzung Ihrer Instanz. Informationen zum Anzeigen von Messwerten und zum Festlegen von Benachrichtigungen finden Sie unter Memcache-Instanzen überwachen.

Messwert Vollständige Messwertadresse
Cache-Speicher memcache.googleapis.com/node/cache_memory
Systemarbeitsspeichernutzung memcache.googleapis.com/node/memory/utilization
Cache-Trefferquote memcache.googleapis.com/node/hit_ratio
Bereinigungen memcache.googleapis.com/node/eviction_count

Arbeitsspeichernutzung des Systems verwalten

Wenn Ihre Instanz unter Speicherdruck steht oder OOM-Fehler auftreten, führen Sie die folgenden Schritte aus, um das Problem zu beheben:

  1. Prüfen Sie eine OOM-Bedingung.
  2. Erhöhen Sie den reservierten Arbeitsspeicher auf der Instanz.
  3. Skalieren Sie die Instanz vertikal..
  4. Legen Sie für flüchtige Schlüssel eine TTL fest..
  5. Löschen Sie Schlüssel manuell in der Instanz.
  6. Wenn Sie immer noch OOM-Bedingungen feststellen, wenden Sie sich an den Google Cloud Platform-Support.

OOM-Bedingung prüfen

Wenn Ihre Instanz eine OOM-Bedingung aufweist, ist das erste Signal dafür ein Neustart der Instanz. Wenn Sie feststellen möchten, ob ein Neustart durch eine OOM-Bedingung verursacht wurde, rufen Sie die metrics Betriebszeit und Systemspeicherauslastung auf.

Wenn die Nutzung des Systemarbeitsspeichers über 90 % betrug, bevor die Betriebszeit auf Null fiel, bedeutet dies, dass der Neustart der Instanz wahrscheinlich durch eine OOM-Bedingung verursacht wurde.

Reservierten Arbeitsspeicher erhöhen

Durch das Erhöhen des reservierten Arbeitsspeichers wird mehr Platz für Arbeitsspeicher-Overhead geschaffen. Dies geschieht, indem das Cache-Speicherlimit Ihrer Instanz reduziert wird. Sie sollten den reservierten Arbeitsspeicher erhöhen, wenn der Messwert für die Systemarbeitsspeicherauslastung 90 % überschreitet.

Eine Anleitung zum Anpassen der Konfiguration des reservierten Arbeitsspeichers finden Sie unter Memcache-Instanzen konfigurieren.

Durch Erhöhen des reservierten Speichers wird der für die Speicherung von Elementen verfügbare Arbeitsspeicher reduziert, was zu einer vorzeitigen Elementbereinigung führt. Dadurch kann die Cache-Trefferquote Ihrer Instanz verringert werden. Elemente werden nicht bereinigt, wenn Bereinigungen deaktiviert sind.

Instanz vertikal skalieren

Folgen Sie der Anleitung unter Memcache-Instanzen skalieren, um die Knotenzahl zu erhöhen. Wenn Ihre Anwendung so konfiguriert ist, dass die Schlüssel auf die Knoten fragmentiert werden, erhöht sich der für Ihre Anwendung verfügbare Gesamtspeicherplatz des Elements und die Anzahl der auf jedem einzelnen Knoten gespeicherten Schlüssel wird reduziert.

TTLs für flüchtige Schlüssel festlegen

Konfigurieren Sie Ihre Anwendung so, dass TTLs für gespeicherte Schlüssel in Memcached festgelegt werden. Standardmäßig prüft Memcache regelmäßig, ob Schlüssel abgelaufen sind, und entfernt sie. Dadurch wird Speicherplatz auf Ihrem Server freigegeben und eine weitere Cache-Arbeitsspeicherzuweisung verhindert.

Schlüssel manuell in der Instanz löschen

Sie sollten das Löschen von Schlüsseln in Erwägung ziehen, wenn Sie unter Speicherdruck stehen. Da Open Source-Memcache jedoch keinen zuvor zugewiesenen Speicher freigibt, verringert das Löschen von Schlüsseln nur die Wahrscheinlichkeit, dass eine OOM-Bedingung eintritt. Es verringert die Wahrscheinlichkeit, dass neue Schreibvorgänge den leeren Arbeitsspeicher verwenden. Wachsender Arbeitsspeicheraufwand kann immer noch zu einer OOM-Bedingung führen, da der zuvor zugewiesene Arbeitsspeicher für die Speicherung von Elementen reserviert ist und nicht durch den Aufwand genutzt werden kann.