Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Speichermanagement im Notes Java Umfeld
datenbanken24:
Wir nutzen für unseren Internetservice
datenbanken24.de
mehrere Domino 6.01 CF1 Server auf Suse 8.1
auf Rootservern bei Puretec.
Ich habe die Diskussion über Java gc Speicherprobleme hier im Forum gelesen und versuche nun herauszufinden, ob dies der Grund für ein Problem auf einem unserer Server sein könnte:
Auch wir haben auf einem unserer Testserver Java-Agenten zu laufen, die NICHT programmiert "recyclen".
Der Server selbst läuft gleichmäßig performant und fehlerfrei, stürzt aber in unwillkürlichen Abständen von 7-14 Tagen komplett ab und zieht das Linux mit runter.
Alle Fehlersuche war bisher vergeblich - die Abstürze sind weder an bestimmte Ereignisse noch vom jeweiligen Traffic abhängig. Alle Logs sind unauffällig.
Folgende Frage:
Wenn die Java Agenten ohne Recycling den Speicher belegen, würde man das über ein Ansteigen der Swap-Datei bemerken?
Die Swap-Datei ist nie zu mehr als ca. 175.000 von 750.000 MB ausgelastet.
Oder belegen diese unsauberen Java-Agenten auch Threads?
Der Serverabsturz kommt meist 1-2 Tage nach mehrfachem Lauf dieser Agenten - nicht aber während die Agenten laufen.
Wenn man davon ausgeht, daß der Domino-Server unter Linux standardmäßig nur 1.000 Threads handeln kann - und die vielleicht durch die Java-Agenten irgendwann voll sind...
Ist so etwas vorstellbar?
Können also unsaubere Java-Agenten dazu führen, dass der Server erst (viel) später abstürzt - ohne daß der Swap voll ist ?
Uwe
MANETU KG
http://www.datenbanken24.de
Axel_Janssen:
--- Zitat von: datenbanken24 am 14.08.03 - 01:17:09 ---Wenn die Java Agenten ohne Recycling den Speicher belegen, würde man das über ein Ansteigen der Swap-Datei bemerken?
Die Swap-Datei ist nie zu mehr als ca. 175.000 von 750.000 MB ausgelastet.
Oder belegen diese unsauberen Java-Agenten auch Threads?
Der Serverabsturz kommt meist 1-2 Tage nach mehrfachem Lauf dieser Agenten - nicht aber während die Agenten laufen.
Wenn man davon ausgeht, daß der Domino-Server unter Linux standardmäßig nur 1.000 Threads handeln kann - und die vielleicht durch die Java-Agenten irgendwann voll sind...
Ist so etwas vorstellbar?
Können also unsaubere Java-Agenten dazu führen, dass der Server erst (viel) später abstürzt - ohne daß der Swap voll ist ?
Uwe
MANETU KG
http://www.datenbanken24.de
--- Ende Zitat ---
Hi Uwe,
für mich sind diese Lotus-RPC Sachen, die von den Java-Wrappern angesprochen auch noch eine black box. Ich kenne mich dazu zu wenig mit der inneren Funktionsweise von Lotus-RPC aus.
Ich seh es aber nicht memory leak Problem, wo langsam aber sicher der Heap Speicher immer mehr belegt und nicht freigegeben wird.
Die Größe der Auslagerungsdatei wäre somit kein zuverlässiger Indikator.
Es erinnert am Verhalten vielmehr an Situationen wo ich RDBMS-Datenbank-Connections nicht schließe. Das führt auch irgendwann zum großen Chaos.
Durch recycle() werden die Client RPC-stubs (weiß nicht, ob das überhaupt Objekte sind und auch nicht ob stubs das richtige Wort ist
::) ) jedenfalls zuverlässig in einen stabilen Ausgangszustand zurückgesetzt. Ohne recycle() eben genau nicht. Keine Ahnung. Vielleicht werden da irgendwelche Semaphore über die RPC handles gelegt und es gibt nur eine endliche Anzahl von benutzbaren stubs, aber das ist reine Spekulation.
Das einzige was ich aus meiner Testerfahrung sagen kann ist, daß recycle stabil funktioniert. Dies in den code der Agenten einzubauen ist auch relativ unproblematisch, wenn man genau drüber nachdenkt. Gehe einfach alle Möglichkeiten (inklusive catch Block durch) und du bist die Probleme los.
Mit Threads dürfte das wenig zu tun haben, da Lotus IMHO threads gar nicht kennt (jeder Agent --> und der gewrappte RPC-code dürfte wie ein Agent arbeiten, belegt einen Prozeß (kann mich aber hier irren und bewege mich auf relativ dünnen Eis)).
Du hast mich auf eine gute Idee gebracht. Ich werde auf meinen code mal 100.000 sequentielle Zugriffe mit Zufallsdaten machen. Mit und ohne recycle. Poste dann. Bei Ralf seiner Firma läuft das ja in Produktion und auf der Website, also dürte es mit recycle() zuverlässig funktionieren.
Gruß Axel
Ralf_M_Petter:
Hm bei Agenten ist das mit dem recyceln so eine Sache. Denn in normalen Java Programmen kann ich am Schluß die Session recyceln wodurch alle anderen Objekte auch ziemlich zuverlässig automatisch mitrecycelt werden. Bei Agents darf man aber auf keinen Fall die Session oder den AgentContext recyceln. Da die Grundregel beim recyceln ist, dass nur diese Objekte recycelt werden dürfen, die auch vom Benutzer erstellt wurden. Session und AgentContext werden von Notes in Agenten automatisch bereitgestellt. Deshalb solltest du jedes von dir erstellte Objekt auf jeden Fall händisch recyceln. Du schreibst, dass du nichts auffäliges in den logs finden kannst. Was steht denn in den Logs?
Grüße
Ralf M Petter
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln