2009-07-24 1 views
2

Ich versuche herauszufinden, warum meine Web-App (ich habe es nicht geschrieben, aber ich muss es debuggen) ständig den Tomcat-Webserver neu gestartet wird. Alles, was ich in den Protokollen vor dem Neustart des Servers zu sehen ist:Warum startet mein Tomcat-Server neu und was ist org.apache.catalina.core.AprLifecycleListener?

Jul 24, 2009 7:52:15 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent 
INFO: The Apache Portable Runtime which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.5.0_09/jre/lib/i386/server:/usr/local/jdk1.5.0_09/jre/lib/i386:/usr/local/jdk1.5.0_09/jre/../lib/i386 
Jul 24, 2009 7:52:15 AM org.apache.coyote.http11.Http11BaseProtocol init 

Ich kann diese gleiche Verarbeitung auf anderen Gruppen von Dateien tatsächlich tut, und es funktioniert gut, aber diese eine bestimmte Gruppe zu tun bewirkt, dass der Server neu zu starten. Meistens hoffe ich, dass jemand mir sagen kann, ob das nur eine Auszeit ist oder ob es eine andere Protokolldatei geben sollte, die mir sagt, warum es stirbt. Und wenn es ein Timeout ist, wenn es eine Möglichkeit gibt, es zu erhöhen.

aktualisieren: Ich habe versucht, den Server mit bin/catalina.sh run beginnen, die die Ausgabe statt catalina.out stanadard heraus bringt, und alles, was ich anstelle der oben erhalten, ist der Fortschritt von meiner app und dann „getötet“.

Als Nebenwirkung, weiß ich nicht, was es neu zu starten, aber wenn ich versuche, den Server mit bin/catalina.sh run neu zu starten, erhalte ich eine BindException, so etwas es neu gestartet.

Update 2: Es wurde Tomcat 5.5 und Java 5 verwendet. Ich habe Tomcat 6 installiert und es für die Verwendung von Java 6 eingerichtet, und das Gleiche passiert. Außerdem, wenn ich ein "Echo $" mache? nach dem "Killed" gibt es mir "137", was wahrscheinlich darauf hindeutet, dass die Hosting-Firma es aus irgendeinem Grund abtötet.

+0

Gehört das nicht auf SF? – Draemon

+2

Wenn es meine App ist, die es tötet, dann ist es ein Programmierproblem. –

+1

Übrigens, da die Antwort war "meine Hosting-Firma sind Idioten" und nicht ein Programmierproblem, fühlen Sie sich frei zu stimmen, um dies zu schließen. Ich habe "zu lokal" gewählt. –

Antwort

3

Macht nichts - es stellt sich heraus, dass die Hosting-Firma meinen Prozess (mit Kill -9 nicht weniger) tötete, weil es zu viel CPU-Zeit brauchte. Jetzt muss ich herausfinden, wie man diese unglaublich zeitaufwendige Aufgabe erledigt, ohne 90% ihrer CPU für mehr als 10 Minuten zu benutzen - ich habe versucht, Tomcat zu "necken" und das hat nicht geholfen, also muss ich vielleicht einen "Schlaf" hinzufügen 1000) "in der Verarbeitungsschleife oder so.

0

Entpacken Sie die Webanwendung, und prüfen Sie, ob Tomcat ohne sie verfügbar ist. Ich vermute eine schlechte Tomcat-Installation.

+0

Tomcat kommt auf und bleibt auf, es sei denn, ich versuche dieses eine bestimmte Ding auf diesem einen bestimmten Satz von Dateien. Wenn ich dasselbe auf anderen Dateien versuche, funktioniert es gut. Ich hoffe wirklich, dass mir jemand sagen kann, wie ich herausfinden kann, was mit meiner App nicht stimmt. –

+0

Das einzige, was ich mir vorstellen könnte Tomcat nach unten bringen ist System.exit(). Versuchen Sie, einen Methodenhaltepunkt auf System.exit() zu setzen. Dazu müssen Sie sich mit einem Debugger an Tomcat anhängen. –

+0

Haben Sie die vollständige Quelle für diese Anwendung? –

1

Ich glaube, dass Sie nur sehen, dass APR-Nachricht, wenn der Server zum ersten Mal gestartet wird.

Eine in Tomcat bereitgestellte Anwendung sollte nicht die Möglichkeit haben, den gesamten Server anzuhalten und neu zu starten - das macht wenig Sinn. Bestimmte Dinge können getan werden, um eine Webapp selbst neu zu laden (z. B. web.xml zu ändern, oder klicken Sie auf Reload von Tomcat Manager), aber nichts eine deployed App sollte in der Lage sein, den gesamten Server zu stoppen/starten.

Sind Sie sicher, dass es nicht etwas externes Stoppen und Starten des Servers gibt? Ein Shell-Skript oder ein Cron-Job irgendwo?

+0

Nein, es ist ziemlich konsistent über den Neustart, wenn ich diese eine Sache in der App mache, und nicht neu starten, wenn ich es nicht tue. –

+0

und das Ding ist ...? –

3

Ich weiß, das ist lahm, aber ist es möglich, dass Ihre App irgendwie verursacht System.exit() aufgerufen wird?

+2

Ich habe das mehr als einmal gesehen. – phatmanace

+0

Es gibt einen Aufruf zu beenden, aber es ist in einem eigenständigen Test main(), und es ist ein LOG.error voraus - ist es möglich, dass System.exit es beendet, bevor der LOG.error geschrieben wird, oder Spült es Puffer? –

4

AprLifecycleListener liegt in der Verantwortung der Apache Portable Runtime zu initialisieren, siehe http://tomcat.apache.org/tomcat-6.0-doc/apr.html

Könnten Sie die Protokolleinträge des Shutdown Post (Haben Sie noch haben, oder ist das vor allem sehen Sie?)?

BTW, du sagst, dass Tomcat neu startet, die Standard-Shell-Skripte starten nur einmal Tomcat, sie beenden nur, wenn Tomcat beendet. Haben Sie irgendeine Wrapper-Software (wie http://wrapper.tanukisoftware.org/), die Ihren Server möglicherweise neu startet?

+0

Es gibt keinen Wrapper - ich beginne es mit bin/startup.sh. Und es gibt nichts im Protokoll vor diesem AprLifecycleListener-Eintrag. –

+0

startup.sh startet Tomcat nicht neu, wenn die JVM beendet wird. Sind Sie sicher, dass Sie einen vollständigen Neustart erhalten? – WMR

+0

Nein, ich weiß nur, dass das, was ich mache, aufhört und die catalina.out-Datei eine Reihe von Startnachrichten anzeigt, die mit dieser AprLifecycleListener-Nachricht beginnen. –