# Memory Leak in Servlet nach längere Laufzeit



## JanHH (8. Dez 2010)

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


----------



## maki (8. Dez 2010)

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.


----------



## JanHH (8. Dez 2010)

Danke, werds probieren.


----------



## Noctarius (8. Dez 2010)

Ansonsten mal mit einem Memory Profiler arbeiten. Eventuell siehst du den wachsenden Instanzenbaum auch schon nach ein paar Tagen beobachten.


----------



## JanHH (8. Dez 2010)

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.


----------



## Noctarius (8. Dez 2010)

Ja kannst du. YourKit kennt z.B. einen Agent-Mode  Denke das können andere Profiler auch.


----------



## JanHH (8. Dez 2010)

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..


----------

