Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > Übersicht tags


Speichermangel der JVM erkennen und beheben

agorum core läuft in einer Java Virtual Machine (JVM). Reicht der Arbeitsspeicher nicht aus, der dieser JVM zugewiesen ist, wird das System langsam oder reagiert zeitweise gar nicht. Diese Dokumentation beschreibt, wie Sie einen Speichermangel erkennen und den Speicher der JVM passend einstellen.

Voraussetzungen

Hintergrund: Garbage Collection

Die JVM verwaltet ihren Speicher innerhalb des Maximums, das der Parameter Xmx festlegt. Objekte, die nicht mehr benötigt werden, gibt der Garbage Collector frei. Er arbeitet im Hintergrund, ohne den Betrieb anzuhalten. Deshalb steigt der freie Speicher immer wieder sprunghaft an und sinkt danach wieder.

Benötigt ein Prozess kurzfristig viel Speicher, etwa beim Extrahieren eines großen Dokuments, und ist nicht genug frei, muss der Garbage Collector gründlich aufräumen. Gelingt das nicht im Hintergrund, hält die JVM vollständig an, bis der Speicher freigegeben ist. Dieser Vorgang heißt Full GC (auch Stop the World). Solange er läuft, reagiert agorum core nicht. Reicht der freigegebene Speicher trotzdem nicht aus, bricht der Vorgang mit einem OutOfMemoryError ab.

Einen Speichermangel erkennen

Typische Anzeichen

Hinweis: Mehr Arbeitsspeicher für die virtuelle Maschine oder den Server erhöht den Speicher der JVM nicht automatisch. Die JVM verwendet nur so viel Speicher, wie mit dem Parameter Xmx festgelegt ist. Passen Sie deshalb auch die Einstellungen der JVM an, siehe RAM nachträglich anpassen (JDK).

Den Speicher im agorum core support tool beobachten

  1. Öffnen Sie links in der Seitenleiste Weitere Apps und dann support tool.
  2. Wählen Sie links im Menü Base System.
  3. Sehen Sie sich den Eintrag JVM Free Memory an.

    Ergebnis: Sie sehen den momentan freien Speicher, das Minimum, das Maximum und den Durchschnitt sowie den Verlauf als Kurve.

Hinweis: JVM Free Memory zeigt den Speicher, der zum Zeitpunkt der Messung frei ist. Das ist nicht der Speicher, der nach einer vollständigen Garbage Collection frei wäre. Ein einzelner niedriger Wert ist deshalb noch kein Zeichen für einen Speichermangel. Aussagekräftig ist der Verlauf über einen längeren Zeitraum.

Den Verlauf deuten

Verlauf der Kurve Bedeutung
Die Kurve pendelt deutlich auf und ab. Der Garbage Collector gibt regelmäßig Speicher frei. Der Speicher reicht aus.
Die Kurve sinkt über längere Zeit ab und pendelt danach nur noch zwischen niedrigen Werten nahe der Untergrenze, etwa um 100 MB. Der Garbage Collector findet kaum noch freien Speicher. Der JVM ist zu wenig Speicher zugewiesen.

Den GC-Log einschalten

Genauer als die Kurve im agorum core support tool ist der Garbage-Collection-Log (GC-Log) der JVM. Er zeigt, wann ein Full GC aufgetreten ist und wie lange er gedauert hat. Den GC-Log schalten Sie über Startoptionen der JVM ein, die Sie im Startskript von agorum core ergänzen.

Hinweis: agorum core verwendet Java 8. Die folgenden Optionen gelten für Java 8. Weitere Optionen, etwa zum Rotieren der Log-Dateien, finden Sie in der Java-Dokumentation.

  1. Beenden Sie agorum core.
  2. Öffnen Sie das Startskript in einem Editor:

    Linux
    Installationspfad/agorum/agorumcore/scripts/roi_jboss

    Windows
    Installationspfad\agorum\agorumcore\scripts\roi_jboss.bat
  3. Ergänzen Sie die Optionen für den GC-Log und passen Sie den Pfad an Ihre Installation an.

    Linux: Fügen Sie folgende Zeile vor export JAVA_OPTS ein. Das System legt bei jedem Start eine neue Datei mit Datum und Uhrzeit im Namen an.
    JAVA_OPTS="${JAVA_OPTS} -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/agorum/agorumcore/jboss/server/default/log/gc_ac_$(date +"%Y%m%d_%H%M").log"

    Windows: Fügen Sie folgende Zeile nach set JAVA_OPTS= ein.
    set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:Installationspfad\agorum\agorumcore\jboss\server\default\log\gc_ac.log
  4. Speichern und schließen Sie die Datei.
  5. Starten Sie agorum core neu.

    Ergebnis: Im Ordner jboss/server/default/log entsteht die Datei des GC-Logs und füllt sich während des Betriebs.

Achtung: Verlust des GC-Logs unter Windows durch einen Neustart. Der Dateiname ist fest, deshalb überschreibt die JVM die Datei bei jedem Start. Sichern Sie die Datei vor einem Neustart, wenn Sie sie noch auswerten wollen.

Hinweis: Der GC-Log wächst mit der Laufzeit. Entfernen Sie alte Log-Dateien, die Sie nicht mehr benötigen, oder schalten Sie den GC-Log nach der Analyse wieder ab, indem Sie die Zeile aus dem Startskript entfernen.

Den GC-Log auswerten

  1. Öffnen Sie das Onlinewerkzeug gceasy.io.
  2. Laden Sie die Datei des GC-Logs hoch.

    Ergebnis: Sie erhalten eine Reihe von Auswertungen, etwa zu Full GCs und deren Dauer, sowie Hinweise, was sich optimieren lässt.

Wie ein GC-Log ausgewertet wird, zeigt auch die Dokumentation Solr konfigurieren am Beispiel von Solr.

Den Speicher passend einstellen

  1. Erhöhen Sie den Speicher der JVM wie in RAM nachträglich anpassen (JDK) beschrieben.
  2. Beobachten Sie nach dem Neustart den Eintrag JVM Free Memory über mehrere Tage im normalen Betrieb.

    Ergebnis: Pendelt die Kurve deutlich auf und ab, ist der Speicher passend eingestellt.

Achtung: Beeinträchtigung des Servers durch zu viel Speicher für die JVM. Das Betriebssystem benötigt selbst Arbeitsspeicher, etwa als Dateicache. Weisen Sie der JVM deshalb nicht den gesamten freien Arbeitsspeicher des Servers zu, sondern nur so viel, wie die Messung ergibt.

Die Einstellung erneut prüfen

Ein passend eingestellter Speicher bleibt gültig, solange sich die Nutzung nicht wesentlich ändert. Prüfen Sie die Einstellung erneut, wenn deutlich mehr Benutzer mit agorum core arbeiten oder neue Hintergrundprozesse hinzukommen, etwa Automatisierungen oder KI-Verarbeitung.

Weiterführende Dokumentationen