Ankündigung

Einklappen
Keine Ankündigung bisher.

Speicherproblem mit Java/Tomcat

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frage: Speicherproblem mit Java/Tomcat

    Hallo
    Es gibt hier seit längerem eine Java/Tomcat-Anwendung, die Probleme macht. Soll heissen "hängen bleiben", riesiger Speicherbrauch, etc.

    Wenn denn die Anwendung hängt, wurde in der Vergangenheit die gesamte Maschine gebootet (das kriegt das Helpdesk alleine hin). Dann "fliegen aber alle raus", d.h. wenn Anwender sich mühsam eine "interessante" Abfrage zusammenklickt haben (über Internet, mittels einer Weboberfläche), müssen Sie von vorn anfangen.

    Nun kam die Idee "Loadbalancer" auf, das würde die Anzahl der rausfliegenden Anwender verringern, wenn man schon mal eine Maschine booten oder zumindest Tomcat neu starten muss.

    Habt ihr eine vorhandene Anwendung schon mal auf 2,3,4-Maschinen verteilt? Also statt einem dicken Hobel mit 64 GB RAM, z.B. zwei Stück mit jeweils 32 GB oder drei Stück mit jeweils 25 GB.

    The Apache Tomcat Connector - Generic HowTo - LoadBalancer HowTo klingt ja so, als sei das sehr sehr einfach.

    Die Anwendung als solche anpassen, dass sie besser/stabiler/... läuft, da sitzt der Hersteller seit 6 Monaten dran, ist halt nicht so einfach ... da ist mehrere riesige Oracle-Datenbanken dahinter, mit Geo und und ...

    Ciao



    Code:
            # top
            top - 12:02:43 up 8 days,  3:46,  4 users,  load average: 5.88, 3.59, 2.60
            Tasks: 123 total,   2 running, 121 sleeping,   0 stopped,   0 zombie
            Cpu(s): 93.2%us,  0.2%sy,  3.3%ni,  3.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
            Mem:  66007800k total, 48872532k used, 17135268k free,   241096k buffers
            Swap:  2104472k total,    40104k used,  2064368k free,  1596340k cached
    
              PID  PPID USER     GROUP     PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
             1949     1 tomcat   tomcat    25   0 33.4g  32g  21m S  373 52.4 117:49.06 /usr/lib64/jvm/java-1.6.0/bin/java -Xmx32g -Xms16g -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -verbose:gc -Djava.util.prefs.systemRoo
            21069     1 tomcat   tomcat    39  15 17.1g  11g  26m S   13 18.0  34:00.17 /usr/lib64/jvm/java-1.6.0/bin/java -Xmx16g -Xms12g -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -verbose:gc -Djava.util.prefs.systemRoo
             8605  8603 hsqldb   hsqldb    18   0 16.0g 257m 9132 S    0  0.4   9:34.13 /usr/lib64/jvm/java-1.6.0/bin/java -classpath /var/lib/hsqldb/lib/hsqldb.jar org.hsqldb.util.MainInvoker org.hsqldb.Server
             5083  4982 mysql    mysql     16   0  131m 6844 2428 S    0  0.0   4:47.44 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/mysqld.pid --skip-external-locking --port=3306 --socket=/var/l
              362  5224 wwwrun   www       15   0 54372 2748 1304 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              443  5224 wwwrun   www       16   0 54372 2744 1316 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              554  5224 wwwrun   www       16   0 54372 2736 1312 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              579  5224 wwwrun   www       16   0 54372 2732 1292 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              580  5224 wwwrun   www       15   0 54372 2708 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              659  5224 wwwrun   www       16   0 54372 2704 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              661  5224 wwwrun   www       15   0 54372 2704 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              662  5224 wwwrun   www       15   0 54372 2828 1368 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              663  5224 wwwrun   www       16   0 54372 2708 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              664  5224 wwwrun   www       15   0 54372 2716 1292 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              665  5224 wwwrun   www       15   0 54372 2728 1304 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              666  5224 wwwrun   www       15   0 54372 2760 1324 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              671  5224 wwwrun   www       16   0 54372 2728 1292 S    0  0.0   0:00.01 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              672  5224 wwwrun   www       15   0 54372 2736 1312 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              673  5224 wwwrun   www       15   0 54372 2720 1296 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1158  5224 wwwrun   www       16   0 54372 2684 1264 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1163  5224 wwwrun   www       15   0 54372 2724 1300 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1164  5224 wwwrun   www       16   0 54372 2720 1292 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1199  5224 wwwrun   www       16   0 54372 2684 1264 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1206  5224 wwwrun   www       16   0 54372 2752 1308 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1207  5224 wwwrun   www       16   0 54372 2708 1272 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1209  5224 wwwrun   www       16   0 54372 2748 1308 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1210  5224 wwwrun   www       16   0 54372 2704 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            31358  5224 wwwrun   www       15   0 54372 2768 1316 S    0  0.0   0:00.02 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            31517  5224 wwwrun   www       16   0 54372 2784 1332 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            31548  5224 wwwrun   www       15   0 54372 2760 1312 S    0  0.0   0:00.01 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            31906  5224 wwwrun   www       16   0 54372 2772 1324 S    0  0.0   0:00.02 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            31947  5224 wwwrun   www       16   0 54372 2784 1328 S    0  0.0   0:00.01 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            32002  5224 wwwrun   www       15   0 54372 2768 1320 S    0  0.0   0:00.02 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
              677  5224 wwwrun   www       15   0 54344 2724 1308 S    0  0.0   0:00.01 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1200  5224 wwwrun   www       16   0 54344 2708 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1201  5224 wwwrun   www       15   0 54344 2704 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1202  5224 wwwrun   www       15   0 54344 2708 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1204  5224 wwwrun   www       15   0 54344 2748 1324 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1263  5224 wwwrun   www       16   0 54344 2704 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1464  5224 wwwrun   www       15   0 54344 2708 1284 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1457  5224 wwwrun   www       16   0 54240 2624 1220 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1463  5224 wwwrun   www       15   0 54240 2624 1220 S    0  0.0   0:00.00 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             5224     1 root     root      16   0 54240 3624 2304 S    0  0.0   3:55.17 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
            20399  5224 wwwrun   www       16   0 54240 2044  728 S    0  0.0   0:00.02 /usr/sbin/httpd2-prefork -f /etc/httpd/httpd.conf
             1254  5043 root     root      16   0 42440 2996 2300 R    0  0.0   0:00.00 sshd: root@pts/2
            12106  5043 root     root      15   0 42276 2980 2328 S    0  0.0   0:00.01 sshd: root@pts/0
             5043     1 root     root      16   0 29048  272  164 S    0  0.0   4:56.74 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
             5112     1 root     mail      16   0 26840  580  400 S    0  0.0   3:36.64 sendmail: accepting connections
             5123  5122 mail     mail      16   0 26516 1136  320 S    0  0.0   4:14.52 sendmail: running queue: /var/spool/clientmqueue
             8603     1 hsqldb   hsqldb    18   0 24316 1384 1084 S    0  0.0   0:00.00 su hsqldb -c cd '/var/lib/hsqldb' && echo $$ > '/var/run/hsqldb.pid' && exec '/usr/lib64/jvm/java-1.6.0/bin/java'   -classpath '/var/lib/hsqldb/lib/hsqldb.jar

  • #2
    AW: Speicherproblem mit Java/Tomcat

    Wo läuft dieser Tomcat genau drauf, was ist die Basis?

    Hat der Hersteller seine Applikation auf Speicherlecks getestet?

    Ein Loadbalancer kaschiert das Problem nur wenn diese Applikation mies programmiert wurde. Ich denke, dass die Server dann so oder so wieder volllaufen und hängen werden...es dauert halt einfach länger.

    Hier mal zum Lesen:
    Zuletzt geändert von Sokrates_82; 30.05.2011, 10:36.

    Kommentar


    • #3
      AW: Speicherproblem mit Java/Tomcat

      Danke.

      Zitat von Sokrates_82 Beitrag anzeigen
      Wo läuft dieser Tomcat genau drauf, was ist die Basis?
      Der Tomcat läuft auf einem
      more /etc/SuSE-release
      SUSE Linux Enterprise Server 10 (x86_64)
      VERSION = 10
      PATCHLEVEL = 2
      in einer VMware ESX-Instanz (Version 4.1), mit auf dem VMware-Server laufen noch andere Server/Anwendungen ohne Probleme
      Der Tomcat redet wohl mit mehrere Oracle-Datenbanken, "zwischen" Endanwender und dem Java ist wohl noch so ein Framework, was die Datenselektion komfortabel (!) für den Endanwender macht.

      Zitat von Sokrates_82 Beitrag anzeigen
      Hat der Hersteller seine Applikation auf Speicherlecks getestet?
      vermute ich, die Abteilung hier ist nur für Betrieb zuständig, nicht für Entwicklung oder ähnliches.

      Zitat von Sokrates_82 Beitrag anzeigen
      Ein Loadbalancer kaschiert das Problem nur wenn diese Applikation mies programmiert wurde.
      "lipstick for a pig" ist genau die Anforderung, die mein Chef stellt, mit vielleicht nicht ganz so deutlichen Worten.
      Aktuell ist eine Begrenzung drin, auf 10 Benutzer, der elfte kriegt ganz einfach angezeigt "kommen sie später wieder". Das finde ich super-peinlich.

      Zitat von Sokrates_82 Beitrag anzeigen
      Ich denke, dass die Server dann so oder so wieder volllaufen und hängen werden...es dauert halt einfach länger.
      Hauptspeicher wird eh noch gekauft (aber die aktuellen Server können max. 128 GB RAM, von denen haben wir sechs, also "schön verteilen" falls möglich) und wenn mein Chef angehauen wird "mach ma Anwendung XXX stabiler/schneller, dann ist einfach mehr Speicher kaufen sehr leicht bzw. sagen "tja, wenn ChefChef den Speicher nicht zahlt, dann darf er nicht meckern".

      Kommentar


      • #4
        AW: Speicherproblem mit Java/Tomcat

        Wie sieht es mit dem Connection Pooling aus?

        Ist das aktiviert?

        Kommentar


        • #5
          AW: Speicherproblem mit Java/Tomcat

          Zitat von Sokrates_82 Beitrag anzeigen
          Wie sieht es mit dem Connection Pooling aus? Ist das aktiviert?
          Code:
          ~# grep -i poolprepar /etc/tomcat6/server.xml | wc -l
          0

          Kommentar


          • #6
            AW: Speicherproblem mit Java/Tomcat

            Seltsam.

            Ihr könnt es ja mal mit Balancing probieren...aber ich denke nicht, dass es helfen wird.

            Kommentar


            • #7
              AW: Speicherproblem mit Java/Tomcat

              Zitat von Sokrates_82 Beitrag anzeigen
              Ihr könnt es ja mal mit Balancing probieren...aber ich denke nicht, dass es helfen wird.
              Warum sollte das nicht helfen? Divide and Conquer?

              Kommentar


              • #8
                AW: Speicherproblem mit Java/Tomcat

                Sagen wir es mal so:

                Wenn eine Applikation dürftig programmiert ist, dann ist davon als Folge der "Hang" eines Servers noch harmlos.

                Interessant ist doch eher die Frage, wie fähig der oder die Programmierer des Herstellers in anderen Belangen sind.

                Besonders interessant wird diese Frage wenn sensible Daten auf dem DB Server liegen, die Datenschutzgesetzen unterliegen.

                Da geht es dann nicht mehr nur um SLAs, sondern um echt heikle juristische Themen.

                Informatiker denken da eher selten daran. Man sollte in solchen Fällen den Vorgesetzten schriftlich darüber informieren.

                Kommentar


                • #9
                  AW: Speicherproblem mit Java/Tomcat

                  Wo habe ich denn nach Datenschutz gefragt? Dafür gibt es hier eine ganze Abteilung mit studierten Juristen - für irgendwas werden die auch bezahlt.

                  Hier nochmal meine Frage: Habt ihr eine vorhandene Anwendung schon mal auf 2,3,4-Maschinen verteilt?

                  Kommentar


                  • #10
                    AW: Speicherproblem mit Java/Tomcat

                    Hmm ist schwierig zu sagen ob das geht. Es hängt tatsächlich stark von der Webapplikation ab - wenn diese irgend einen Status im Memory hält (was bei der menge der Daten angenommen werden kann) wird es nicht möglich sein sie zu verteilen.

                    Beispiel:
                    Wenn die Applikation eine Sitzreservierung (Kino, Konzert, egal) implementiert und den Status ob ein Sitzt belegt ist oder nicht im Memory hält (zusätzlich zur Persistierung in einer Datenbank), müsste die Instanz der Applikation welche eine Reservierung über die Web-Oberfläche erhält die anderen Applikationsinstanzen informieren damit die den Sitz ebenfalls in ihrem Speicher als "Besetzt" markieren (oder im einfachsten Fall den Status von der Datenbank erneut in den Speicher laden).

                    Wenn die Applikation Statuslos ist oder den Status verteilen kann, hat man noch immer das Problem mit den Nebenläufigen DB-Zugriffen. Wenn man ein Persistenz-Framework (Hibernate/JPA) einsetzt ist das meistens schon geregelt (ausser man verwendet die vom Framework angebotenen Funktionen nicht. Willkommen in der Hölle). Es geht hier hauptsächlich darum, zu verhindern, dass bei zwei fast gleichzeitigen Speichervorgängen des selben Datensatzes der zweite Speichervorgang die Daten des ersten überschreibt. Das ist jedoch nichts was man irgendwie konfigurieren oder nachrüsten kann. Es ist aber je nach Anwendung nicht so tragisch.

                    Bei der top-Ausgabe sehe ich eine HSQLDB, könnte es sein das die Applikation selber auch eine HSQLDB-Instanz am laufen hat (in-process)? Weil mit HSQLDB kann man eine Datenbank erzeugen welche nur im Speicher vorhanden ist (die DSN sieht dann irgendwie so aus: jdbc:hsqldb:mem:<dbname>). Wenn Du die DSN's (also die Strings um die Datenquelle anzusteuern) konfigurieren kannst könntest Du die HSQLDB's auf einen anderen Server umbiegen. Wenn aber nichts konfiguriert werden kann, wäre das aus meiner Sicht auch wieder ein subtiles Zeichen, dass die Applikation nicht verteilbar ist.

                    Kommentar


                    • #11
                      AW: Speicherproblem mit Java/Tomcat

                      DAS nenne ich mal ne kompetente Antwort, danke.

                      In der HSQL-Datenbank sind nur die (relativ statischen) "Selektoren", das sind die Elemente, die den Endanwender das Auswählen leichter machen. Die werden zentral definiert, dann muss eben zweimal statt einmal einkopiert werden.

                      Ich vermute sogar, die Webapplikation ist nur lesend, aber eben auf einem riesigen Datenbestand, der komfortabel aber dennoch flexibel zugreifbar/suchbar sein soll.

                      Mitanlass ist eben: Unsere VMware-Server können nur 128 GB RAM auf dem Mainboard unterbringen, und wenn 64 GB RAM nur für 10 Nutzer reichen .... Mit 48 GB wars schlimm, aber zu dem Zeitpunkt war vielleicht die Anwendung noch fehlerbehafteter.

                      Kommentar


                      • #12
                        AW: Speicherproblem mit Java/Tomcat

                        Chefchen sagt "Die Anwendung ist 100% lesend", der Datenimport kommt aus anderen Quellen, nicht übers Internet.

                        "Wie kann man die Lastverteilung denn testen" ist 'natürlich' die nächste Frage.

                        Kommentar


                        • #13
                          AW: Speicherproblem mit Java/Tomcat

                          evtl. die Applikation auf 2 Servern aufsetzten und dann per Round Robin verteilen?
                          Gruss
                          IncSys


                          the answer to life, the universe and everything = 42

                          Kommentar


                          • #14
                            AW: Speicherproblem mit Java/Tomcat

                            Zitat von IncSys Beitrag anzeigen
                            evtl. die Applikation auf 2 Servern aufsetzten und dann per Round Robin verteilen?
                            Round robin via DNS oder via Apache oder wie? Hast Du n Beispiel-Konfigurations-Ausschnitt?

                            Kommentar


                            • #15
                              AW: Speicherproblem mit Java/Tomcat

                              Round robin via DNS ist wahrscheinlich das einfachste. Und wenn es wirklich so ist, dass die Applikation nur lesen ist, dann sollte dies kein Problem sein!

                              Lastverteilung per DNS ? Wikipedia
                              Gruss
                              IncSys


                              the answer to life, the universe and everything = 42

                              Kommentar

                              Lädt...
                              X