2010-03-12 8 views
13

Ich bin auf der Suche nach einem Hinweis, wie man Tomcat CI bereit macht oder einen Servlet Container/Anwendungscontainer, der oft neu positioniert, wie sie bei Verwendung von Hudson Ci passieren.Ist Tomcat 6 bereit für die kontinuierliche Integration oder wie funktioniert es?

Ich habe festgestellt, dass Tomcat 6 Webapps nicht richtig depploy, Klassen in jvm verlassen.

Zum Beispiel überwacht I tomcat 6 mit VisualVM: auf Anfang 2000 Klassen, auf deploy einer App 3000 nach redeploy 4000 und 5000 Klassen umschichten und so weiter - was zu Abstürzen, Speicherlecks ...

Okay, Hoffnung man hat einen Tipp auf Tomcat und Continuous-Integration oder andere App-Server.

+0

Ich würde * liebe * Antworten darauf auch zu sehen. Wir hatten ähnliche Probleme mit PermGen-Speicherfehlern usw., wenn unser CI automatisch auf Tomcat 6 umgestellt wird. – Pete

+0

Die neueste Tomcat-Version ausführen? Es hat mehr Fehlerprotokollierung darüber, was beim erneuten Laden des Kontexts nicht richtig bereinigt wird. Wenn Sie mysql verwenden, rufen Sie den Connector/j 5.1.12 ab, da er ein Thread-Leck behebt, das zu großen Nachlade-Lecks in tomcat führt. – nos

+0

Wir verwenden kleine Apps ohne MySQL oder Connectors. Kleine Beispiel-Apps aus dem Frühling, einfach Hallo Welt jsp aps und so weiter. – jpse

Antwort

7

aktualisieren: Ich habe einige Tests mit einer mäßig komplexen Web-Anwendung mit Spring, Hibernate, GWT, C3P0 und HSQLDB durchgeführt.

Stock Tomcat 6.0.24 funktioniert gut, vorausgesetzt, Sie verwenden den Client-Compiler. Es funktioniert bei zehn Umsetzungen, während der Server-Compiler bei der vierten umgeht. Ich schlage vor, Sie versuchen mit der -client Flagge.

Der Versuch, die Verwendung des Servercompilers zu debuggen, war fruchtlos, da die Eclipse MAT keine GC-Wurzeln für die Klassenlader zeigte und sie trotzdem beibehalten wurden. Eine oft verwiesen Bug wurde PermHeap bloat in and only in server VM Berichten zufolge in Java 6 Update 16 behoben, aber meine Tests fehlschlagen mit Java 6 Update 16.


Tomcat wurde für eine solche Gedächtnisprobleme geprüft und doppelt geprüft, und sehr oft die Anwendungen waren schuld. Nein, das heißt nicht, dass es so schwer ist, so ein Dauerwellen-Leck zu haben.

Es gibt zwei Möglichkeiten:


Wenn Sie wirklich wollen, um dieses Problem debuggen und sicherstellen, dass es Tomcat Schuld ist, können Sie Sie die Eclipse memory analyser. Sie haben eine gute blog post explaining how to debug PermGen problems.

+0

Hallo, du hast gesagt GCC ist kaputt ... Was meinst du genau damit? Gibt es einen Test? sowieso, ja, in der Tat Anwendung oft den Ärger verursacht, deshalb verwenden wir Beispiel-Apps, wie sie Millionen Mal verwendet. Die neue Leckerkennungsfunktion löst das Problem leider nicht, aber es ist ein schöner Schritt in die richtige Richtung und hilft Hand zu verstehen, was los ist ... – jpse

+0

Ja, die GCC-Referenz ist ziemlich undurchsichtig, sorry. Was ich sagen will, ist, dass wir als Entwickler die Tendenz haben, andere Komponenten - Anwendungsserver, Betriebssystem, kosmische Strahlung - für Probleme verantwortlich zu machen, die wir nicht erklären können. Ich habe das zu oft gemacht und fast immer den Fehler in meinem Code gefunden. –

+0

@Robert danke für die Eclipse-Link – jpse

1

ich drastische Maßnahmen ergreifen, immer wieder gerne, um sicherzustellen, dass alles sauber ist und in einem vollständig reproduzierbar Zustand, wenn

1) beginnend töten tomcat

2) löschen sie von der Platte

3) entpacken Sie eine saubere Version

4) überschreiben Sie Ihre persönlichen modifizierten konfigurierten Dateien

5) neu starten tomcat

6) bereitstellen Ihre App

+0

Danke, wir haben frische saubere Tomcat für Tests, keine Bastelei angewendet, das ist nicht gerade der Punkt ... – jpse

+0

Während dies der "sicherste" Ansatz ist, wird es auch viel mühsamer Einrichtung, vor allem wenn Sie haben mehrere Tomcat-Server werden von CI aktualisiert (dev, alpha, preproduction usw.). Warum haben Sie diese drastischen Maßnahmen als notwendig erachtet (insbesondere die Tomcat-Neuinstallation)? – sleske

-1

Werfen Sie einen Blick auf Apache Cactus - es ist ein Framework für serverseitige In-Container-Unit-Tests. Es funktioniert ziemlich gut mit jedem Servlet-Container.

+0

Während Apache Cactus interessant ist, sehe ich nicht, wie sich dies auf die Frage bezieht, die sich auf Probleme bezieht, die durch häufige Neuinstallationen verursacht werden. – sleske