Speicher-Zuweisung (OutOfMemoryError)

Der Speicher, den die JVM (Java Virtual Machine) maximal belegen darf, wird ihr bereits beim Start mitgegeben. Auf 32-Bit-Systemen ist bei ca. 1,5 GB das Maximum erreicht. Bei 64-Bit-Systemen (und dem dazu passenden 64-Bit-JDK!) dürfen es auch ein paar Gigabyte sein. Die Speichergrenzen werden in den Startskripten bzw. der Konfiguration für den Windows-Service festgelegt (siehe unten).


Es handelt sich immer um zwei Angaben:

  • -Xms (bzw. wrapper.java.initmemory): Initialer Speicher.

  • -Xmx (bzw. wrapper.java.maxmemory): Maximaler Speicher.


Das sieht dann z. B. wie folgt aus:


-Xms512M -Xmx1536M


Hier werden der VM für den Start 512 MB gegeben, während der Laufzeit darf sie sich maximal 1536 MB (also 1,5 GB) holen. Das ist, wie erwähnt, die Obergrenze für 32-Bit-Systeme. Diese Angaben finden Sie in folgenden Dateien:


Linux/Unix:


Die betreffende Zeile beginnt etwa so:


./bin/execute.sh
JAVA_OPTIONS="-Xmx1536M -Xms512M -server ...


Windows für den Integration-Server-Start in der Konsole:

Die betreffende Zeile beginnt etwa so:


./bin/hub.bat
set OPTIONS=-Xms512M -Xmx1024M -server ...


Windows für den Start als Dienst:


Hier lauten die Angaben folgendermaßen.


./etc/wrapper.conf
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=512
# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1024


Verwenden Sie ein 64-Bit-System, können Sie durchaus einige Gigabyte als maximalen Speicher angeben. Dabei müssen Sie allerdings beachten, dass dasselbe Java-Programm unter einer 64-Bit-JVM ca. 30 Prozent mehr Speicher belegt. Kalkulieren Sie dies also mit ein.

Die aktuelle Speicherauslastung wird übrigens in einer der Logdateien regelmäßig ausgegeben. Die Datei heißt message.log und sie findet sich im Verzeichnis ./logs/services des Integration Servers. Die Angaben sehen wie folgt aus.


12:16:59 NORMAL SYSTEM:SERVICEFACTORY:MEMORYTHREAD Total mem: 518912 KB, free mem: 411826 KB, max. mem: 1555392 KB, 20% used


Machen Sie am besten bei Profilen, die Kandidaten für hohen Speicherverbrauch sind, ein paar ordentliche Last-Tests und schauen Sie sich dann diese Log-Einträge an. Dann haben Sie mal eine Vorstellung davon, was Ihnen im Live-Betrieb bevorsteht. Unix-/Linux-User haben ja das wunderbare Tool "grep" dafür.

Das kann Ihnen für eine Weile Speicherprobleme vom Hals halten, jedoch sorgen Sie damit nur dafür, dass "Speicherfresser" länger ungestört wüten dürfen. Irgendwann werden Sie wieder an Datenmengen gelangen, für die auch einige Gigabyte nicht mehr reichen. Daher sollten Sie lieber Ihre Profile von Anfang an so aufsetzen (oder spätestens jetzt umbauen), dass sie gar nicht erst zum Problem werden können. Lesen Sie also einfach mal weiter.

Zusatzmodule


Außerdem bieten wir die Zusatzmodule Prozesslast-Optimierung und Load Balancing an. Siehe auch Abschnitt Remote Server.