Memo Java HeapSpace An: ASYS - Administratoren Von: Stephan Meyer Thema: Java Heapspace - Problematik Datum: 18.02.2009 Inhalt 1. Vorbemerkung .......................................................................................... 1 2. Direkte Java-Aufrufe (Batch-Aufrufe) ........................................................... 1 2.1 Einstellungen für den Kommunikationsserver ...................................... 2 3. Java-Bean – impliziter Aufruf von Java durch Starten der Oberflächen (Administrator und GUI).................................................................................. 2 3.1 Java 1.6 – Problematik .................................................................... 5 1. Vorbemerkung 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 zwei verschiedene Arten gestartet. 2. Direkte Java-Aufrufe (Batch-Aufrufe) Zum einen als direkter Java-Aufruf mit Übergabe einer Klasse. Dies geschieht bei allen für ASYS implementierten „Batch-Aufrufen“, also z.B. bei der Kommunikation („acsPreVersand.bat“, „acsEmpfang.bat“,…) aber auch beim Aufruf z.B. der „SqlTool.bat“ oder der „mergeRep.bat“. Diesen direkten Java-Aufrufen können die oben erwähnten Speicherparameter übergeben werden. Beispiel: Die „acsEmpfang.bat“ ruft die Datei „acs\ACSBridge.bat“ auf. In dieser erfolgt erst der Start der eigentlichen Java-Anwendung: %JAVA_HOME%\bin\java -Xms64M -Xmx512M -classpath %CLASSPATH% de.condat.acs.bridge.ACSBridge %1 %2 %3 ITU GmbH 2009 81949963 1/5 Memo Java HeapSpace Die bei diesen Aufrufen übergebenen Speicherparameter sind: -Xms64M: Dieser Wert, d.h. 64 MB werden sofort beim Start der Anwendung für diese Anwendung reserviert. -Xmx512M: Dies ist der Maximalwert (512 MB) an Speicher, den Java für diese Anwendung verwenden wird. Alle von der ITU ausgelieferten „direkten“ Java-Aufrufe über Batch-Jobs sind mit genau den im Beispiel genannten Speicherparametern versehen. Es kann jedoch nicht 100%tig ausgeschlossen werden, dass bei Ihnen aufgrund von selbst geschriebenen Skripten oder unvollständigen Updates noch Aufrufe vorhanden sind, die nicht mit diesen Parameters versehen sind (es gibt eine Fehlermeldung, die in diese Richtung deutet). Ohne Übergabeparameter verwendet Java als Default-Wert für den maximal verwendeten Speicher nur 64 MB. 2.1 Einstellungen für den Kommunikationsserver Die Speichereinstellungen für den Kommunikationsserver werden in der „…\AsysComServer\tomcat\bin\startup.bat“ gesetzt. set CATALINA_OPTS=-Xms512m -Xmx512m Hierbei werden sofort beim Starten des Kommunikationsservers 512 MB für den Kommunikationsserver reserviert und dies ist auch gleichzeitig der Maximalwert. Nach unseren bisherigen Erfahrungen sollte dies für den Kommunikationsserver ausreichend sein. 3. Java-Bean – impliziter Aufruf von Java durch Starten der Oberflächen (Administrator und GUI) Beim Aufruf der Oberflächen wird Java nicht direkt, sondern als „applet - plugin“ gestartet. Daher können die Speicherparameter hierbei nicht dem Java-Aufruf direkt übergeben werden, sondern müssen anderweitig gesetzt werden. Zum Setzen dieser Parameter dient (normalerweise – s.u. „Java 1.6 - Problematik“) das „Java Control Panel“, welches über die „Systemsteuerung“ -> „Java“ geöffnet werden kann. Tabreiter „Java“ Bereich: „Java-Applet-Laufzeiteinstellungen“ Die dort vorgenommen Einstellungen sind „userspezifisch“ vorzunehmen. Dies ist insbesondere für Citrix-Systeme relevant – wir bei der ITU wissen allerdings leider nicht, wie dies zu geschehen hat - es geht aber. Hinweis so nebenbei: Über den Tabreiter „Erweitert“ können Sie z.B. auch noch einstellen, ob die Java-Konsole (Kaffeetassensymbol) ein- oder ausgeblendet oder gar nicht gestartet werden soll. ITU GmbH 2009 81949963 2/5 Memo Java HeapSpace Für die von ASYS verwendete Java-VM (die Java-Version mit dem axbridgeUnterverzeichnis; die Java-Version, für die unser Java-Bean registriert wurde) sind die Speicherparameter einzutragen. Wir empfehlen, die vorstehend abgebildeten Parameter einzutragen, also: -Xms256m -Xmx256m Bis auf das jeweils letzte Zeichen („m“ für Megabyte) ist auf eine korrekte Großund Kleinschreibung zu achten. ITU GmbH 2009 81949963 3/5 Memo Java HeapSpace Die letzte Empfehlung, die wir gelesen haben, lautet dahingehend, für beide Parameter den gleichen Wert einzutragen. Kontrolle über die Java-Konsole: Sofern Sie die Java-Konsole eingeblendet haben oder einblenden können, ist es dort möglich, sich diverse Informationen über die Parameter, mit denen das Java Plug-in gestartet wurde, ausgeben zu lassen. Sie finden im oberen Bereich eine Auflistung der Buchstaben (und Zahlen), die mit Befehlen verbunden sind. Durch einfaches Drücken einer dieser Tasten wird der zugehörige Befehl sofort ausgeführt. Über die Taste „m“ können Sie sich die derzeitige Speicherauslastung anzeigen lassen. ITU GmbH 2009 81949963 4/5 Memo Java HeapSpace Wenn die Einstellung, wie oben beschrieben, vorgenommen wurde, sollten Ihnen als „Speicher: 260.160K“ angezeigt werden. Hinter „Frei:“ können Sie sehen, wie viel Speicher die Mittelschicht noch zur Verfügung hat. 3.1 Java 1.6 – Problematik ASYS kann derzeit nicht mit der Java-Version 1.6 betrieben werden (dies liegt an einer unvollständigen Security-, Kryptographiekomponente innerhalb der JavaVersion 1.6). Nichtsdestotrotz kann es sein, dass Sie bereits eine Java-VM 1.6 auf Ihrem Rechner haben. Leider können Sie in diesem Fall die Speicherparameter nicht mehr über das „Java-Control-Panel“ eingeben bzw. die ggf. vorgenommenen Einstellungen werden einfach ignoriert. Dies ist ein Fehler innerhalb von Java, auf den wir keinen Einfluss haben. Sofern Sie die Java 1.6 – Version nicht wieder entfernen möchten oder können – auch dies ist theoretisch möglich – müssen die Speicherparameter in diesem Fall über eine Umgebungsvariable gesetzt werden. „Systemsteuerung“ -> „System“ -> „Umgebungsvariablen“ Name der Variablen: _JPI_VM_OPTIONS Wert der Variablen: -Xms256m -Xmx256m Diese Umgebungsvariable kann sowohl im „Benutzer-„ oder auch im „Systembereich“ gesetzt werden. ITU GmbH 2009 81949963 5/5