Freigeben über


Tools zum Behandeln von Arbeitsspeicherproblemen

Hinweis

Die Pläne Basic, Standard und Enterprise gelten ab Mitte März 2025 als veraltet und werden über einen Zeitraum von drei Jahren eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie in der Ankündigung zur Einstellung von Azure Spring Apps.

Der Plan Standardverbrauch und dediziert gilt ab dem 30. September 2024 als veraltet und wird nach sechs Monaten vollständig eingestellt. Es wird empfohlen, auf Azure Container Apps umzustellen. Weitere Informationen finden Sie unter Migrieren des Plans „Standardverbrauch und dediziert“ von Azure Spring Apps zu Azure Container Apps.

Dieser Artikel gilt für:✅ Basic/Standard ✅ Enterprise

In diesem Artikel werden verschiedene Tools beschrieben, die für die Behandlung von Java-Arbeitsspeicherproblemen nützlich sind. Sie können diese Tools in vielen Szenarien verwenden, die nicht auf Arbeitsspeicherprobleme beschränkt sind, aber dieser Artikel konzentriert sich nur auf das Thema Arbeitsspeicher.

Warnungen und Diagnosen

In den folgenden Abschnitten werden Ressourcenintegritätswarnungen und Diagnosen beschrieben, die über das Azure-Portal verfügbar sind.

Ressourcenintegrität

Mit dem Azure-Aktivitätsprotokoll und Azure Service Health können Sie App-Lebenszyklusereignisse überwachen und Warnungen einrichten. Weitere Informationen finden Sie unter Überwachen von App-Lebenszyklusereignissen mithilfe des Azure-Aktivitätsprotokolls und der Azure Service Health.

Die Ressourcenintegrität sendet Warnungen zu App-Neustartereignissen aufgrund von „Nicht genügend Arbeitsspeicher“-Containerproblemen (OOM). Weitere Informationen finden Sie unter App-Neustartprobleme wegen „Nicht genügend Arbeitsspeicher“-Problemen.

Der folgende Screenshot zeigt eine App-Ressourcenintegritätswarnung, die ein OOM-Problem angibt.

Screenshot des Azure-Portals mit der Azure Spring Apps-Seite „Ressourcenintegrität“ mit hervorgehobener OOM-Meldung.

Diagnose und Problembehandlung

Die Azure Spring Apps-Diagnose ist ein interaktives Verfahren, das Sie bei der Problembehandlung Ihrer App ohne Konfiguration unterstützt. Weitere Informationen finden Sie unter Selbstdiagnose und Lösungen von Problemen in Azure Spring Apps.

Im Azure-Portal finden Sie die Arbeitsspeicherauslastung unter Diagnose und Problembehandlung, wie im folgenden Screenshot gezeigt.

Screenshot des Azure-Portals mit der Azure Spring Apps-Seite „Diagnose und Problembehandlung“ mit im Dropdownmenü hervorgehobener „Arbeitsspeicherauslastung“.

Die Arbeitsspeicherauslastung bietet eine einfache Diagnose für die Auslastung des App-Arbeitsspeichers, wie im folgenden Screenshot gezeigt.

Screenshot des Azure-Portals mit der Azure Spring Apps-Seite „Arbeitsspeicherauslastung“.

Metriken

In den folgenden Abschnitten werden Metriken beschrieben, die Probleme einschließlich hoher Arbeitsspeicherauslastung, zu großem Heapspeicher und Garbage Collection-Anomalie (zu häufig oder nicht häufig genug) abdecken. Weitere Informationen finden Sie unter Schnellstart: Überwachen von Azure Spring Apps-Apps mit Protokollen, Metriken und Ablaufverfolgung.

App-Arbeitsspeicherauslastung

Die App-Arbeitsspeicherauslastung ist ein Prozentsatz, der dem App-Speicher, dividiert durch den App-Arbeitsspeichergrenzwert, entspricht. Dieser Wert zeigt den gesamten App-Arbeitsspeicher an.

jvm.memory.used/committed/max

Für den JVM-Speicher gibt es drei Metriken: jvm.memory.used, jvm.memory.committed und jvm.memory.max, die in der folgenden Liste beschrieben werden.

„JVM-Speicher“ (jvm.memory) ist kein klar definiertes Konzept. Hier ist jvm.memory die Summe aus dem Heapspeicher und dem früheren permGen-Teil des Nicht-Heapspeichers. JVM-Speicher enthält keinen direkten Arbeitsspeicher oder anderen Speicher wie den Threadstapel. Spring Boot Actuator sammelt diese drei Metriken und bestimmt den Geltungsbereich von jvm.memory.

  • jvm.memory.used ist die Menge des verwendeten JVM-Speichers, einschließlich des verwendeten Heapspeichers und des verwendeten früheren permGen-Teils im Nicht-Heapspeicher.

    jvm.memory.used ist eine wichtige Repräsentation der Veränderung des Heapspeichers, da der frühere permGen-Teil in der Regel stabil ist.

    Wenn Sie jvm.memory.used zu groß finden, erwägen Sie, eine kleinere maximale Heapspeichergröße festzulegen.

  • jvm.memory.committed ist die Menge des Arbeitsspeichers, der zur Nutzung für JVM reserviert ist. Die Größe von jvm.memory.committed ist im Grunde der Grenzwert des nutzbaren JVM-Speichers.

  • jvm.memory.max ist die maximale Menge an JVM-Speicher, nicht zu verwechseln mit der tatsächlich verfügbaren Menge.

    Der Wert von jvm.memory.max kann manchmal verwirrend sein, da er wesentlich höher als der verfügbare App-Arbeitsspeicher sein kann. Um dies zu erläutern: jvm.memory.max ist die Summe aller maximalen Größen des Heapspeichers und des früheren permGen-Teil des Nicht-Heapspeichers, unabhängig vom tatsächlich verfügbaren Arbeitsspeicher. Wenn beispielsweise für eine App im Azure Spring Apps-Portal 1 GB Arbeitsspeicher festgelegt ist, beträgt die Standardgröße des Heapspeichers 0,5 GB. Weitere Informationen finden Sie im Abschnitt Standardmäßige maximale Heapgröße von Java-Speicherverwaltung.

    Wenn die Standardgröße des komprimierten Klassenspeicherplatzes 1 GB beträgt, ist der Wert von jvm.memory.max größer als 1,5 GB, unabhängig davon, ob die App-Speichergröße 1 GB beträgt. Weitere Informationen finden Sie in der Oracle-Dokumentation unter Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide: Other Considerations.

jvm.gc.memory.allocated/promoted

Diese beiden Metriken dienen der Beobachtung der Java Garbage Collection (GC). Weitere Informationen finden Sie im Abschnitt Java Garbage Collection von Java-Speicherverwaltung. Die maximale Heapgröße beeinflusst die Häufigkeit der geringfügigen GC und der vollständigen GC. Die maximale Größe des Metaspace und des direkten Speichers beeinflussen Full GC. Wenn Sie die Häufigkeit der Garbage Collection anpassen möchten, erwägen Sie eine Änderung der folgenden maximalen Speichergrößen.

  • jvm.gc.memory.allocated ist die Menge, um die der Speicherpool der neuen Generation nach einer Garbage Collection und vor der nächsten vergrößert wird. Dieser Wert gibt die geringfügige GC wieder.

  • jvm.gc.memory.promoted ist die Menge, um die der Speicherpool der alten Generation nach einer GC vergrößert wird. Dieser Wert gibt die vollständige GC wieder.

Sie finden dieses Feature im Azure-Portal, wie im folgenden Screenshot gezeigt. Sie können bestimmte Metriken auswählen und Filter für eine bestimmte App, Bereitstellung oder Instanz hinzufügen. Sie können auch eine Teilung anwenden.

Screenshot des Azure-Portals mit Azure Spring Apps-Seite „Metriken“.

Weiteres Debuggen

Für ein weiteres Debuggen können Sie Heapabbilder und Threadabbilder manuell erfassen und Java Flight Recorder (JFR) verwenden. Weitere Informationen finden Sie unter Manuelles Erfassen von Heap- und Threadabbildern und Verwenden von JFR in Azure Spring Apps.

Heapspeicherabbilder zeichnen den Zustand des Java-Heapspeichers auf. Threadspeicherabbilder zeichnen die Stapel aller Livethreads auf. Diese Tools sind über die Azure CLI und auf der App-Seite des Azure-Portals verfügbar, wie im folgenden Screenshot gezeigt.

Screenshot des Azure-Portals mit der Seite „App-Übersicht“ und hervorgehobener Schaltfläche „Problembehandlung“

Weitere Informationen finden Sie unter Manuelles Erfassen von Heap- und Threadabbildern und Verwenden von JFR in Azure Spring Apps. Sie können auch Tools von Drittanbietern wie Memory Analyzer verwenden, um Heapabbilder zu analysieren.

Ändern von Konfigurationen zum Beheben von Problemen

Einige Probleme, die Sie möglicherweise identifizieren, umfassen Container-OOM, zu großen Heapspeicher und Garbage Collection-Anomalien. Wenn Sie eins dieser Probleme identifizieren, müssen Sie möglicherweise die maximale Arbeitsspeichergröße in den JVM-Optionen konfigurieren. Weitere Informationen finden Sie im Abschnitt Wichtige JVM-Optionen von Java-Speicherverwaltung.

Sie können die JVM-Optionen mithilfe des Azure-Portals oder der Azure CLI ändern.

Navigieren Sie im Azure-Portal zu Ihrer App, und wählen Sie dann im Abschnitt Einstellungen des Navigationsmenüs die Option Konfiguration aus. Aktualisieren Sie auf der Registerkarte Allgemeine Einstellungen das Feld JVM-Optionen, wie im folgenden Screenshot gezeigt:

Screenshot des Azure-Portals mit der Seite „App-Konfiguration“ und hervorgehobenen „JVM-Optionen“.

Siehe auch