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