# Potentielles Memory Leak bei Servlet



## wolfgke (11. Jul 2008)

Hallo,
für die Uni muss ich mit einem Team eine Anwendung mittels Java-Servlets+Firebird umsetzen. Als Applikationsserver wird auf Tomcat gesetzt. Für das Binding Java-Firebird setzen wir auf Jaybird. Für die Entwicklung wird auf die Java EE-Version von Eclipse gesetzt. Um was für eine Anwendung es sich handelt, tut wenig zur Sache.

Auf jeden Fall sollen wir hierbei auf Code aufbauen, den ein anderer Student im Rahmen seiner Diplomarbeit entwickelt hat.

Nun ergab sich bei einem komplexeren (geforderten) Testszenario, dass Java irgendwann der Heap-Speicher ausgeht und die Anwendung damit mit einer entsprechenden Exception (OutOfMemory) abbricht. Auf meinem eigenen Rechner konnte ich diesen Test nicht wiederholen, da bei mir das System schon vorher in die Knie ging. Selbstverständlich habe ich für den Test das ganze als .war-Datei exportiert und den Test im "normalen" Tomcat gemacht und nicht in einem aus Eclipse gestarteten Tomcat.

Aus diesem Grund tippe ich darauf, dass in irgendeiner Form ein Memory Leak vorliegt und zwar in der Form, dass Speicher, der eigentlich nicht mehr benötigt wird, zu lange allokiert bleibt, weil noch irgendein Objekt eine Referenz darauf besitzt.

EDIT: es sei denn jemand kann mir belegen, dass der GC eventuell schuld sein könnte. Ich möchte es nicht definitiv ausschließen.

Um diesen Fehler aufzudecken und zu fixen, würde ich gerne wissen: was für (kostenlose) Tools stehen zur Verfügung um derartige Speicherlecks aufzudecken? Sie sollten natürlich idealerweise in die oben geschilderte Anwendungsumgebung passen. Aber das wichtigste Zielkriterium ist: bin ich in der Lage unter Verwendung des Tools das geschilderte Problem zu lösen.

Grüße
wolfgke


----------



## maki (11. Jul 2008)

Ob du damit was anfangen kannst weiss ich nicht, aber lade dir doch mal Eclipse TPTP runter, ime funzt das besser als Gesamtpacket als wenn du versuchen würdest es als Plugin runterzuladen.


----------



## byte (11. Jul 2008)

Sind die Servlets zustandlos oder werden Membervariablen angelegt? Werden Daten in der Session gespeichert? Mit welchen Parametern startet Ihr den Tomcat (Heapsize)?


----------



## Guest (11. Jul 2008)

Mit Eclipse TPTP kannst Du deine Probleme mit dem Memory finden. Überblick zum Tool gibt es hier:
http://www.eclipse.org/tptp/home/downloads/4.5.0/documents/quicktour/quick_tour.html

Ansonsten gibt es noch YourKit und JProbe. Gegebenenfalls kannst Du vielleicht schon mit der jeweiligen Trial-Version dein Problem finden.


----------



## wolfgke (12. Jul 2008)

Danke für eure Tipps. Wenn ich weitere Fragen habe, werde ich sie hier stellen-


----------



## Helios4711 (14. Jul 2008)

Hier noch nen Hinweis auf das aktuelle Java 6 Update. Das hat nun einen eingebauten visuellen Profiler:
http://jars.de/java/visualvm-profiler-jetzt-im-jdk

Gruß,

Heli


----------



## wolfgke (15. Jul 2008)

@Helios

Das sieht hilfreich aus. Weißt du, ob das auch mit Tomcat-Prozessen funktioniert (ich werde es sowieso ausprobieren - schon alleine, um das Java-SDK mal wieder zu updaten)?


----------

