rsc: Tomcat braucht zu viel RAM

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

--
Fortschritt ist die Verwirklichung von Utopien!
  1. 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

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

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

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

          --
          Fortschritt ist die Verwirklichung von Utopien!
          1. 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

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

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

              --
              Fortschritt ist die Verwirklichung von Utopien!
              1. 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

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

                  --
                  Fortschritt ist die Verwirklichung von Utopien!
          2. 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

            --
            Es gibt 10 Arten von Menschen. Solche, die das Binärsystem verstehen, und solche, die es nicht verstehen.
            Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:} va:} de:] zu:) fl:( ss:) ls:/ js:|
            1. 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

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

                --
                Fortschritt ist die Verwirklichung von Utopien!
            2. 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

              --
              Fortschritt ist die Verwirklichung von Utopien!
          3. 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

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

              --
              Fortschritt ist die Verwirklichung von Utopien!
              1. 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

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