Startseite


Java Heapspace - Problematik

Seit einigen ASYS-Versionen tritt häufiger das Problem auf, dass beim Betrieb von ASYS der für Java reservierte Speicher nicht ausreicht. Dies äußert sich dann in einem „Java Heap Space - Error“. Wenn dieser Fehler auftritt muss ASYS beendet werden.

Java nutzt nicht automatisch den gesamten auf einem System zur Verfügung stehenden Speicher, sondern beim Start einer Java-Anwendung können/müssen dieser Java-Anwendung Speicherparameter übergeben werden. Zum einen ist dies ein Wert für den sofort beim Start der Anwendung für die Anwendung reservierten Speicher, zum anderen ein Maximalwert, der von dieser Anwendung in Anspruch genommen werden kann. Es handelt sich hierbei nicht unbedingt um „physikalischen“ Speicher, sondern ggf. auch um „virtuellen“.

In ASYS werden die Java-Anwendungen auf verschiedene Arten gestartet.

Der Kommunikationsserver von ASYS ist darauf ausgerichtet, dass nicht alle Nachrichten auf einmal, sondern konfigurierbare Päckchen (Default=50 Nachrichten pro Aufruf; AsysComServerImpl.MaxReceivePerLoop=…) bearbeitet werden sollen.

Allgemeiner Hinweis: Um die Anzahl der Nachrichten, die bei einem Aufruf verarbeitet werden, zu reduzieren, könnte es sich empfehlen, den Zeitplan für die Kommunikationsjobs auf kürzere Zeiträume zu setzen (z.B. stündlich eine Abholung VPS BMU danach den Empfang BMU, eine Abholung VPS ASYS intern…).

Ansonsten können als Workaround auch noch die Java-Parameter hochgesetzt werden: siehe hierzu den nachfolgenden Text.

Die Speichereinstellungen für die Server werden in ..\AsysServer\apache-tomcat-a.b.cc1)\bin\setenv.bat gesetzt.

Default

  • set JAVA_OPTS=-Xms2g -Xmx4g …

Hierbei werden sofort beim Starten des Kommunikationsservers 2048 MB als Startwert und 4096 MB als Maximalwert für die Server reserviert. Nach den bisherigen Erfahrungen sollte dies für die Server ausreichend sein.

Wenn der Server als Dienst installiert wurde (über Install Asys-Comserver service.bat) können die Speicherparameter über eine eigene Java-Anwendung geändert werden.

Führen Sie hierfür die Datei ..\AsysServer\apache-tomcat-a.b.cc2)\bin\tomcat[VERSION]w.exe aus.

Auf dem Tabreiter „Java“ sind hierbei die Speicherparameter

  • Initial memory pool und
  • Maximum memory pool

zu setzen.

Beim Aufruf der Oberflächen wird Java nicht direkt, sondern implizit aus der Eclipse-Anwendung gestartet, als die die ASYS-Anwenderoberflächen realisiert sind.

Die Speichereinstellungen werden in den ini-Konfigurationsdateien vorgenommen, die sich im gleichen Verzeichnis befinden, wie die exe-Dateien (Asys7.exe (.ini), Admin.exe (.ini), AdminClient.exe (.ini)).

Default für die Asys7.ini:

  [...]
  -Xms2048m
  -Xmx2048m
  -Xss10m
  [...]

Der Parameter -Xss stellt einen Speicher für die Java-interne Thread-Verwaltung bereit. Im Rahmen der Prüfung von Zeichenketten auf Einhaltung des durch die BMU-Schnittstelle vorgegebenen Zeichenvorrates (DIN-91379 Datentyp C) kann sich die Default-Einstellung3) von Java für diesen Speicherbereich als zu klein erweisen. Der hier angegebene Wert 10m sollte daher nicht unterschritten werden!

Der aktuelle Speicherzustand von ASYS7 kann über den Info-Dialog angezeigt werden.

Die in der Zeile 'Speicherverbrauch' angegebenen Werte stehen für

  • free: den aktuell verfügbaren Speicher
  • total: den aktuell reservierten Speicher
    • Dieser Wert ist mindestens so hoch, wie der mittels -Xms eingestellte initiale Speicher und nicht höher als der mittels -Xmx festgelegte.
  • max: den maximal verfügbaren Speicher (entsprechend dem per -Xmx eingestellten Wert).

Ein Beispiel: Gegeben seien die Parameter -Xms1024M und -Xmx2048M in der Asys7.ini-Konfigurationsdatei. Wird der Info-Dialog der Oberfläche direkt nach dem Programmstart aufgerufen, wird folgendes angezeigt4):

Beispielanzeige der Speicherwerte in der ASYS-Oberfläche

Im Laufe der Programmnutzung nimmt der unter 'free' angezeigte Wert i.d.R. ab 5). Unterschreitet er einen von Java autonom verwalteten Schwellwert oder wird mehr Speicher von der Anwendung angefordert, als freier Speicher verfügbar ist, erhöht sich der unter 'total' angezeigte Wert bis maximal auf den unter 'max' angezeigten. Übersteigen die vom Programm angeforderten Speichermengen den maximal verfügbaren Speicher, erfolgt ein Java-Heap-Space-Error.

ASYS prüft beim Öffnen einer Such-, Anzeige- oder Erstellungsmaske, ob mindestens 200 MB freier Speicher verfügbar ist. Ist dies nicht der Fall, erscheint ein Hinweisdialog für den Anwender, dass einige offene Masken geschlossen werden mögen. Dies wird in den meisten Fällen dazu führen, dass reservierter Speicher freigegeben wird und neu genutzt werden kann.


1) , 2)
Für a.b.cc ist die jeweils verwendete Versionsnummer der Tomcat-Installation einzusetzen!
3)
Der Defaultwert kann von der verwendeten JVM abhängen. Für Eclipse-64-bit-Anwendungen darf von 1024k ausgegangen werden (https://www.eclipse.org/openj9/docs/xss/).
4)
Der Wert unter 'free' kann je nach Programmversion, -einstellungen und -ablauf bis zum Aufruf des Dialogs von dem hier gezeigten abweichen.
5)
Java enthält einen Mechanismus zur Reorganisierung des Speichers - garbage collection - der automatisch nach nicht mehr genutztem Speicher sucht und diesen wieder freigibt, wodurch der Wert des freien Speichers spontan ansteigen kann.
  • adm6/thm/javaheap.txt
  • Zuletzt geändert: 2023/04/25 11:57
  • von smeyer