it-swarm.com.de

Tomcat wird automatisch heruntergefahren

Ich verwende Apache und Tomcat auf einem Windows-Server. Seit heute Morgen arbeitet Tomcat ohne Protokolle. Es hängt nicht, es wird einfach heruntergefahren.
Es gibt kein Protokoll in Tomcat, die CPU/Speicher sind Geldstrafen, es gibt keinen System.Exit in meinem Code. 

Hat jemals jemand dieses Problem gehabt?

Dies geschieht zufällig nach 5-10 Minuten. Die Anwendung reagiert normal und manchmal, Boom .. funktioniert nicht mehr.

UPDATE: Immer noch keine Ahnung. Das Admin-Team installiert die Webapp auf einer anderen Box ...

16
supersheep

Ich hatte dieses Problem und fand die Ursache unter link . Mein Skript zum Starten von Tomcat hatte die letzte Zeile tail -f catalina.out. Irgendwann habe ich dieses Skript nicht beendet, die Shell hat dann ein Zeitlimit überschritten und das Skript mit allen untergeordneten Prozessen, einschließlich Tomcat, beendet.

6
vierab

Das hört sich an, als würde die JVM abstürzen. Haben Sie nach einem JVM-Absturzprotokoll gesucht? Es hat normalerweise einen Namen wie hs_err_pid * .log und wird im Arbeitsverzeichnis der JVM erstellt.

Wenn Sie eine solche Datei finden und hochladen, können wir wahrscheinlich mehr helfen.

Einige Fragen:

  • Haben Sie kürzlich die Version von Java geändert, die Sie verwenden?
  • Welche genaue Version von Tomcat verwenden Sie?
  • Verwenden Sie Tomcat Native (die Apache Portable Runtime)?
5
Matt Solnit

Vor kurzem hatte ich dieses Problem. Wenn jemand in Zukunft das gleiche Problem hat, hoffe ich, dass dies helfen wird.

Szenario: Tomcat wird ohne Protokolle oder Fehler heruntergefahren

Root Ursache für mein Problem: synchronisierte Methode, auf die von einer Task mit TimerTask zugegriffen wird

Ich hatte eine Singleton-Klasse mit einer synchronisierten Methode, auf die von verschiedenen Threads basierend auf dem Zeitgeber oder der Benutzeraktion Zugegriffen wird. Manchmal dauert es einige Minuten, bis diese Methode abgeschlossen ist. Wenn TimerTask auf diese Methode wartet (der Timer ist wahrscheinlich abgelaufen/der Thread wurde beendet oder etwas geschieht im Hintergrund) und in dem Moment, in dem die Sperre für die Methode aufgehoben wird, wird der Tomcat beendet.

Also entfernte ich synchronisiertes Schlüsselwort und entfernte Singleton und nahm einige Codeänderungen für die Thread-Sicherheit vor. Dann ist das Problem weg.

Wie ich herausgefunden habe: Ich hatte eine Protokollanweisung in der ersten Zeile der synchronisierten Methode und jedes Mal, wenn der Tomcat heruntergefahren wurde, fand ich diese Nachricht in den letzten Zeilen.

Grüße, Phanindra Kasturi

2
Phanindra

dinge, auf die Sie beim Debuggen eines Problems wie dieses achten sollten:

  • Überprüfen Sie das Protokollverzeichnis ($ Tomcat_ROOT/logs), um sicherzustellen, dass keine der Protokolldateien Stack-Ablaufverfolgungen enthält
  • Sehen Sie sich das Tomcat-Startskript an, um den Speicherort der Protokolldateien zu überprüfen, um festzustellen, ob die Protokolle nicht in ein anderes Verzeichnis geschrieben werden.
  • Ein anderer Grund könnte sein, dass ein anderer Benutzer/Prozess ein Kill -9 ausgeben kann, das Tomcat töten könnte, ohne dass es dazu gekommen ist, Fehler zu protokollieren.
1
neesh

Konfrontiert mit diesem Problem vor kurzem.

Szenario : Tomcat wurde erfolgreich gestartet, wird jedoch nach 1 Stunde automatisch heruntergefahren. Dies ist manchmal nach 1 Tag der Fall und in den Tomcat-Protokollen ist nichts enthalten.

Problem : Das tatsächliche Problem war eine hohe Speicherauslastung und kein freier SWAP-Speicher.

Wie ich die Lösung gefunden habe

Wenn Tomcat keine Protokolle anzeigt, muss in den Systemprotokollen etwas enthalten sein, also habe ich /var/log/messages geprüft, aber da mir die Erlaubnis verweigert wurde, habe ich /var/log/dmesg versucht und dies erhalten

"Nicht genügend Speicher: Beenden Sie den Prozess 14606 (Java) mit der Punktzahl 106 oder opfern Sie das Kind.".

In der Ausgabe ist mir aufgefallen Swap Memory free 0 K . Der Befehl "top" wurde ausgeführt, um dasselbe zu bestätigen. Irgendwie gab es eine hohe Speicherauslastung, die das Betriebssystem dazu veranlasste, meinen Tomcat-Prozess zu beenden.

Nach stundenlangem Verstehen endlich den Grund.

ps -ef | grep Tomcat zeigte, dass für dieselbe Anwendung mehrere Tomcat-Prozesse ausgeführt wurden. Es hat den Anschein, als hätten frühere Tomcat-Herunterfahren möglicherweise nicht erfolgreich stattgefunden, und die Prozesse wurden auch nach dem Herunterfahren aus irgendeinem Grund nicht abgebrochen, was zu einer hohen Speicherauslastung führte.

Also alle laufenden Tomcat-Prozesse mit kill beendet. SWAP-Speicher wurde freigegeben.

Tomcat wieder gestartet, funktionierte gut. :)

1
Kaushal Dokania

Ich habe CATALINA_OPTS in meinem Pfad bemerkt und das wurde auf eine niedrigere JVM-Größe festgelegt. Daher wurde der Absturz und keine Protokollspur von Tomcat gefunden. Der Server wurde in weniger als 2 Stunden automatisch heruntergefahren.

check, CATALINA_OPTS oder Java_OPTS - diese haben möglicherweise Jvm-Einstellungen. Erhöhen Sie sie entweder oder kommentieren Sie sie und erhöhen Sie den Swap-Speicher.

0
connect2krish

eine andere Möglichkeit ist, dass heute morgen ein Prozess auf der Box gestartet wurde, die an einen Port bindet, den Ihr Server benötigt.

0
akf

“Der Dienst auf dem lokalen Computer wurde gestartet und dann gestoppt. Einige Dienste werden automatisch angehalten, wenn sie nicht von anderen Diensten oder Programmen verwendet werden.”

Ich habe das Problem durchgespielt Ich habe so viele Möglichkeiten ausprobiert, um endlich aus dem Problem herauszukommen, schließlich bekam ich die Lösung wie folgt.

1) Klicken Sie auf Ausführen Befehl vom Startknopf aus.

2) Geben Sie Services.msc ein und klicken Sie auf OK. Sie erhalten alle Dienste auf Ihrem Computer.

3) Wählen Sie Ihren Dienst aus und klicken Sie mit der rechten Maustaste auf den Dienst und wählen Sie Eigenschaften

4) Gehe zu Logon Properties und wähle Local System Account und klicke dann auf OK.

Das wird funktionieren.

0
Niresh S

Manchmal passiert es, wenn ein anderes Programm am selben Port läuft. Zum Beispiel Skype. Fahren Sie das Programm herunter, bevor Sie Tomcat starten.

0
Harpreet Saini

Ist es Ihren Servlets oder einem ihrer Abhängigkeiten erlaubt, System.exit () aufzurufen? (Nicht sicher, wie gesperrt Tomcat-VMs in diesem Sinne sind)

Ich hatte Entwickler, die denken, es sei in Ordnung, exit (666) zu verwenden. beim Erkennen einer nicht invertierbaren Matrix (was nicht gut ist, aber sicher nicht tödlich). Arrgh. Vielleicht haben Sie einen ähnlichen Täter in Ihrem System?

0
Macke