Hallo allerseits,
direkt vorweg: Ich bin mir nicht sicher, in welches Forum dieses Thema am besten passt, da es hier sowohl um Entwicklungsaspekte als auch um administrative Aspekte geht. Irgendwie ist von beiden etwas dabei. Aber zur Not lässt sich das Thema ja immer noch verschieben. Nun aber zum Thema...
Letzte Woche habe ich mich über den Speicherbedarf des Agent Managers, besser gesagt des Prozesses namgr.exe, gewundert. Seit ich meinen Java-Agenten auf dem Server laufen ließ wuchs der Speicherbedarf stetig an und wurde nicht mehr kleiner. Dies hatte dann schlussendlich zur Folge, dass der Agent Manager sich aufhing und nicht mehr reagierte. Da half nur noch den Server durch zu starten.
Nachdem ich dazu meine Bibel (Java unter Lotus Domino) konsultiert hatte stellte ich fest, dass ich bisher einen eklatanten Fehler begangen hatte. Ich erfuhr, dass ich als Java-Programmierer für Lotus Notes / Domino auch dafür Sorge zu tragen habe, dass die von mir ins Leben (bzw. in den Speicher) gerufenen Domino Objekte auch wieder freigegeben werden. Das hatte ich garnicht getan. Da war es kein Wunder, dass der Speicherbedarf des Agent Managers zusehends wuchs bis er schließlich die Segel strich.
Naja, aus Fehlern lernt man. Die Aufgabe mit dem Freigeben des Domino Objekte in meinem Code habe ich sofort nachgeholt und meinen Code mehrmals genau geprüft, damit sich ja kein Speicherleak mehr irgendwo versteckt. Was das anbelangt, sollte mein Agent nun wirklich 100%'ig sauber sein. Alle benutzen Domino Objekte gebe ich sofort nach Gebrauch auch wieder ordnungsgemäß frei.
"Nun sollte sich das mit dem Speicherproblem doch eigentlich gelöst haben" sagte ich mir. Aber leider besteht das Problem immer noch. Wenn ich den Server starte und mir den entsprechenden Prozess im Taskmanager ansehe belegt dieser ~7,3 MB. Starte ich dann ein mal meinen Agenten und betrachte dabei den Speicherbedarf des Prozesses so sieht man, wie dieser bis zum Ende der Laufzeit des Agenten um ~30 MB anwächst. Nachdem der Agent beendet wurde (bzw. er zuende gelaufen ist) sollte doch der Speicherbedarf des Prozesses wieder auf die ursprünglichen ~7,3 MB zurückgehen, denn wofür gebe ich sonst meine Objekte wieder frei? Leider aber bleibt bei Ende der Laufzeit des Agenten der Speicherbedarf unverändert auf dem hohen Level. Starte ich den Agenten erneut steigt der Speicherbedarf nochmals um ~30 MB und bleibt nach Ende der Laufzeit des Agenten wiederum auf dem Hohen Level stehen.
Somit kann ich meinen Agenten ca. vier Mal starten und bis zu Ende laufen lassen. Spätestens beim fünften Mal stirbt dann der AgentManager ab bzw. er bleibt hängen. (Speicherbedarf dann um die 150 MB)
Jetzt frage ich mich: Woran kann das liegen ? Ist es vielleicht sogar normal, dass der Speicherbedarf des Agent Managers nach Ende der Laufzeit eines Agenten nicht zurückgeht ? Vielleicht können hierzu andere Entwickler Stellung nehmen, die mehr Erfahrung haben als ich.
Danke auf alle Fälle schon mal im Voraus, auch dafür, dass Ihr bis hier hin im Text nicht schon längst das Interesse verloren habt.
MfG
Leon