Tomcat braucht zu viel RAM
rsc
- java
0 Marko0 Martin Jung
Hallo zusammen!
Ich hab hier auf nem System (5 CPUs, 4 GB RAM, HP-UX) neben mir einen Tomcat und Oracle.
Allerdings hab ich das Problem, dass der Tomcat irgendwie immer zu viel RAM will - der macht so lange weiter, bis die Kiste stehenbleibt, weil sie keinen RAM mehr hat:
Memory: 2077104K (712548K) real, 4723112K (2818512K) virtual, 236380K free Page# 1/7
5 ? 12614 root 152 20 1260M 232M run 6:26 1.42 1.41 java
5 tty0p0 6271 root 152 20 1252M 215M run 7:39 0.60 0.60 java
Derzeit ist der Tomcat so gestartet:
401 R root - 12614 1 0 152 20 49103e00 8462 - 02:00:00 ? 6:26 /opt/java1.4/bin/PA_RISC2.0/java -Xms512m -Xmx1024m -Xms512m -Xmx1024m -Djava.endorsed.dirs=/opt/jakarta-tomcat-4.0.6/bin:/opt/jakarta-tomcat-4.0.6/common/lib -classpath /opt/java1.4/lib/tools.jar:/opt/oracle/jdbc/lib/classes12.jar:/opt/jakarta-tomcat-4.0.6/bin/bootstrap.jar -Dcatalina.base=/opt/jakarta-tomcat-4.0.6 -Dcatalina.home=/opt/jakarta-tomcat-4.0.6 -Djava.io.tmpdir=/opt/jakarta-tomcat-4.0.6/temp org.apache.catalina.startup.Bootstrap start
Die Speicher-Grenzen mit -Xms -Xmx jucken den irgendwie nicht :-/
Hat jemand ne Idee, wie ich diesen Tomcat *irgendwie* zur Vernunft bringen kann, ohne den dauernd zu killen & neu zu starten oder gar das System neu zu starten?
Vielen Dank schonmal,
Robert
Hallo Robert,
das klingt mir sehr nach einem Fehler in der Anwendung die in Tomcat läuft. Wahrscheinlich irgendeine Schleife, die neue Objekte anlegt, die nicht gelöscht werden. Da Java ja selber löscht, müssen also massig ungenutzte Referenzen existieren. Dass es an TOmcat selber liegt glaube ich eher nicht.
Gruss
Marko
Hallo,
ja entweder es existieren noch Referenzen auf eigentlich überflüssige Objekte, so dass Java sie nicht löschen kann. Oder es ist ein Handle Leak, denn darum muss man sich auch in Java selbst kümmern. Z.b. offene dateien oder Netwaerk Handles (z.B. Datenbankverbindungen), wenn diese nicht geschlossen werden wenn sie nicht mehr gebraucht werden gibts auch Probleme.
Natürlich kann es auch was ganz anderes sein, aber ich würde den Fehler zuerst mal in der eigenen Anwendung suchen - das ist einfach am wahrscheinlichsten.
Dominik
Hi!
[...]
Natürlich kann es auch was ganz anderes sein, aber ich würde den Fehler zuerst mal in der eigenen Anwendung suchen - das ist einfach am wahrscheinlichsten.
Trotzdem kann es doch nicht sein dass man Tomcat nicht zwingen kann sich auf einen Teil der Resourcen zu beschränken!
Grüße
Andreas
Hallo again!
Trotzdem kann es doch nicht sein dass man Tomcat nicht zwingen kann sich auf einen Teil der Resourcen zu beschränken!
Yepp das ist in der Tat ein Problem - ich will/muss Tomcat auf bestimmte Ressoucen beschränken, sonst ist alle 2-3 Tage die Kiste am Ende (des RAMs) :-(
Wie beschränke ich denn den Tomcat mit Gewalt?
Mir ist aufgefallen, immer wenn was mit der Applikation gemacht wird, steigt die RAM-Benutzung *nur* an - und fällt *nie* ab!
Sicher kann es sein, dass da offene Verbindungen zur Datenbank noch existieren etc - ich hab das Projekt nicht entwickelt und bin erst seit kurzer Zeit dabei und muss da auch mal einen (wohl einen sehr tiefen) Blick reinwerfen...
Grüße,
Robert
Hallo Robert,
egal ob Du ihn beschränkst oder nicht, Tomcat wird in jedem Fall seinen Speicher auffressen und am Ende sein, wenn Du Ihn beschränkst nur schneller. Eine bessere Notlösung wäre jede Nacht über einen Cron-job Tomcat durchzustarten.
Gruss
Marko
Hi Marko,
kleiner Zusatz:
Die beste Lösung wäre weiterhin, die Ursache des Problems zu identifizieren, einen entsprechenden Test zu definieren und damit dann das Problem zu lösen.
Viele Grüße,
Martin Jung
egal ob Du ihn beschränkst oder nicht, Tomcat wird in jedem Fall seinen Speicher auffressen und am Ende sein, wenn Du Ihn beschränkst nur schneller. Eine bessere Notlösung wäre jede Nacht über einen Cron-job Tomcat durchzustarten.
Das mit dem Tomcat neu starten ist so ein Problem:
Wenn ich zum jetzigen Zeitpunkt den Tomcat herunterfahre, neu starte, geht mit relativer Sicherheit *gar nichts* mehr, weil Tomcat noch mehr RAM braucht - beim letzten Mal an dieser Stelle konnte man nur noch blind tippen, weil bis auf ein paar KB alles vom RAM wohl weg war .oO( beim "reboot" blieb die Box sogar stehen)
Grüßle,
Robert
Hallo Robert,
wie sieht es aus, wenn Du die Anwendung per Script killst "killall java" ? Dann sollten doch eigentlich alle belegten Resourcen freigegeben werden, oder ?
Kann ja wohl nicht sein, dass eine wildgewordene Webapplication ein ganzes Unix System ins Nirvana schickt.
Was hier ja schon ne Menge Leute gesagt haben, dass das keine echte Lösung ist, ist schon klar :-)
Gruss
Marko
wie sieht es aus, wenn Du die Anwendung per Script killst "killall java" ? Dann sollten doch eigentlich alle belegten Resourcen freigegeben werden, oder ?
Das hab ich inzwischen gemacht, auch wenn etwas umständlicher wegen noch anderen laufenden Prozessen ;-)
Kann ja wohl nicht sein, dass eine wildgewordene Webapplication ein ganzes Unix System ins Nirvana schickt.
Tuts - das ist ja auch net so schwer *g* ne PHP-Endlosschleife mit der richtigen Funktion hätte beinahe auch schonmal nen anderes System versenkt...
Was hier ja schon ne Menge Leute gesagt haben, dass das keine echte Lösung ist, ist schon klar :-)
ICH WEISS ES!! (Wie oft noch?). Aber ich hab erstmal eine lauffähige Box gebraucht, um überhaupt loslegen zu können! :-D
Also das Debugging läuft bereits, nachdem die Kiste jetzt endlich halbwegs sauber läuft.
Robert
Hallo,
Yepp das ist in der Tat ein Problem - ich will/muss Tomcat auf bestimmte Ressoucen beschränken, sonst ist alle 2-3 Tage die Kiste am Ende (des RAMs) :-(
Damit dokterst du an Symptomen rum, nicht an den Ursachen.
Was bringt es dir überhaupt, wenn du den Speicher beschränkst, den sich
die JVM maximal holen darf? Dann funktioniert halt dein Tomcat nach
1-2 Tagen nicht mehr. Gewonnen hast du damit ziemlich wenig.
Du solltest wirklich sehen, wo die Leaks liegen und diese beseitigen.
Alles andere macht wirklich keinen Sinn.
Gruß
Slyh
Hi!
Damit dokterst du an Symptomen rum, nicht an den Ursachen.
ich denke das ist Robert durchaus bewußt.
Was bringt es dir überhaupt, wenn du den Speicher beschränkst, den sich
die JVM maximal holen darf? Dann funktioniert halt dein Tomcat nach
1-2 Tagen nicht mehr. Gewonnen hast du damit ziemlich wenig.
Doch, die Maschine bleibt nicht stehen!
Du solltest wirklich sehen, wo die Leaks liegen und diese beseitigen.
Das auf alle Fälle!
Grüße
Andreas
Damit dokterst du an Symptomen rum, nicht an den Ursachen.
ich denke das ist Robert durchaus bewußt.
Ja, das ist mir natürlich bewusst.
Was bringt es dir überhaupt, wenn du den Speicher beschränkst, den sich
die JVM maximal holen darf? Dann funktioniert halt dein Tomcat nach
1-2 Tagen nicht mehr. Gewonnen hast du damit ziemlich wenig.
Doch, die Maschine bleibt nicht stehen!
Genau - es macht sich nicht sehr gut eine Maschine via "Hardreset" neu zu starten (wegen offener Dateien und so)...
Du solltest wirklich sehen, wo die Leaks liegen und diese beseitigen.
Das auf alle Fälle!
Ist mir klar - aber erstmal muss die Kiste stabil rennen!!
Robert
Damit dokterst du an Symptomen rum, nicht an den Ursachen.
Was bringt es dir überhaupt, wenn du den Speicher beschränkst, den sich
die JVM maximal holen darf? Dann funktioniert halt dein Tomcat nach
1-2 Tagen nicht mehr. Gewonnen hast du damit ziemlich wenig.
Du hast ja Recht, aber es handelt sich hier um ein relativ weit fortgeschrittenes Projekt, das in den nächsten Monaten die Beta-Phase verlassen wird und das jetzt von vielen Benutzern auch bereits aktiv getestet wird...bis das Problem *sauber* gefixt ist, brauche ich eine (halbwegs gute) Work-Around-Lösung :)
Robert
Hallo,
hatte nicht der 4er ab einer bestimmten Version die Möglichkeit eine Anwendung neu zu starten ohne Tomcat zu beenden? Ich bin mir ziemlich sicher dass das geht - evtl. hilft das ja schon.
Dominik
Hallo!
hatte nicht der 4er ab einer bestimmten Version die Möglichkeit eine Anwendung neu zu starten ohne Tomcat zu beenden? Ich bin mir ziemlich sicher dass das geht - evtl. hilft das ja schon.
Weißt du da was genaueres?
Wir setzen hier den Tomcat 4.0.6 ein...
Robert
Hi!
du wirst das wohl in den Konfigurationsdateien freischalten müssen (server.xml und tomcat-users.xml) - mit Passwort etc.
Ich bin sicher da kann man irgendeine Lösung mit nem Skript basteln - aber ich denke auch die Zeit wäre besser investiert das eigentliche Problem zu lösen...
siehe:
http://jakarta.apache.org/tomcat/tomcat-4.0-doc/manager-howto.html
Dominik
Hi,
4/bin/PA_RISC2.0/java -Xms512m -Xmx1024m -Xms512m -Xmx1024m
Ist es möglich, dass die Redundanz der Xm* Parameter zur Ignorierung dieser führt?
Viele Grüße,
Martin Jung