Memory Leak in Servlet nach längere Laufzeit

JanHH

Top Contributor
Hallo,

stehe nach einem Überarbeiten meines Servlet vor einem Problem: Irgendwo ist ein memory leak. Nach einigen Wochen "Dauer-Lauf" kommt ein out-of-memory-error. Was ich geändert hab, war, einen neuen Tokenzier für eine integrierte Skriptsprache zu bauen. Allerdings wüsste ich nicht, wo da was leaken sollte. Das Problem ist, ich kann den Fehler nicht recht reproduzieren. Wenn ich lokal teste, kann ich so viel machen wie ich will, nach der GC ist der Speicher wieder fein leer, da leakt einfach so kurzfristig nix. Was kann man da machen?

Auf dem Server ist tomcat 5.5 und lambda probe installiert, aber so recht weiterhelfen tut mir das auch nicht. Der tomcat ist mittlerweile mit 800 MB Speicher versorgt, das entschärft das Problem zumindest ein wenig.

Optimalerweise müsste man eine Funktion haben, die genau angibt, welche Threads und Objekte den Speicher blockieren. Ich weiss das das mit Profilern (z.B. innerhalb von NetBeans) geht, aber wie gesagt, der Fehler lässt sich ja nicht einfach so lokal reproduzieren.

Oder ist es eh Unsinn, davon auszugehen, eine Webanwendung kann einfach wochenlang vor sich hin laufen? Lieber einmal nachts neu starten? Würde zumindest dazu führen dass das problem in der Praxis nicht mehr auftreten würde.

Gruß+Danke
Jan
 
Webanwendungen können auch ewig laufen, ist aber kein Zufall 😉

Du solltest den Heap Dump aktivieren wenn die JVM abstützt: -XX:-HeapDumpOnOutOfMemoryError
Java HotSpot VM Options

Diesen kannst du dann in Ruhe analysieren.
 
Ansonsten mal mit einem Memory Profiler arbeiten. Eventuell siehst du den wachsenden Instanzenbaum auch schon nach ein paar Tagen beobachten.
 
Kann man denn einen memory profiler auf dem Server laufen lassen? Ich kenn nur so lokal laufende Profiler (Netbeans, Eclipse..). Wäre in der Tat das Beste.
 
Vielen Dank. Wäre allerdings noch dankbarer für einige konkretere Hinweise, was es da für Programme gibt, und was ich da konkret tun muss ;-). Bin bei sowas ja eher eine Niete..
 

Zurück
Oben