Ich habe das folgende Problem:
Ich stelle eine Web-Anwendung in Tomcat (Linux) und nach dem Herunterfahren von Tomcat, wenn ich tun ps -ef
Ich kann immer noch sehen, die java
Prozess läuft.
Ich glaube, das passiert aufgrund einiger hängender Threads, aber ich weiß nicht, wie ich diesen Thread nachverfolgen kann.
Wie kann ich dieses Problem beheben?Wie kann ich einen hängenden Java-Thread debuggen?
Antwort
Sie können 4-5 Thread-Dumps wie unten beschrieben generieren und diese dann mit Tools wie Samurai analysieren.
Was Sie überprüfen möchten, ist, wenn ein festgefahrener Thread oder lang andauernde Transaktion auftritt, zeigen alle Thread-Dumps eine bestimmte Thread-ID in der gleichen Zeile in Ihrem Java-Stack-Trace. Vereinfacht ausgedrückt erstreckt sich die Transaktion über mehrere Thread-Dumps und erfordert daher weitere Untersuchungen.
Jetzt, wenn Sie diese durch Samurai ausführen, wird es diese in roter Farbe hervorheben, so dass Sie schnell darauf klicken und zu den Zeilen mit Problemen gelangen können.
Siehe ein Beispiel dieser here. Sieh dir das Samurai-Ausgabebild in diesem Link an. Die grünen Zellen sind in Ordnung. Rote und graue Zellen müssen betrachtet werden.
Erstellen eines Thread-Dump:
(Linux)
Wenn die JVM in einer Konsole läuft dann einfach Ctrl-\
drücken. Wenn die JVM im Hintergrund läuft dann senden sie die QUIT-Signal:
kill -QUIT process_id
Es process_id ist die Prozessnummer des laufenden Java-Prozess. Der Thread-Dump wird dorthin gesendet, wo auch Standard-Out umgeleitet wird. Regel können Sie die Prozesszahl aller laufenden Java-Prozesse mit dem Befehl erhalten:
ps axf | grep java
Sie sagen, Ihr Java-Prozess existiert immer noch, nicht wahr? Prozesse existieren, solange sie Gewinde angebracht haben, richtig? Wenn ja, würde ich für den folgenden Ansatz gehen: - den Prozess mit dem MBeanServer laufen befestigt und intern von der JVM
dann eine Verbindung zu dem Prozess verwaltet, nachdem Sie das Signal ENDE senden und die Thread-Dump erhalten (es Siehe sollte, dass eine JMX sein. welche Threads verdächtig zu Ihnen.
ich glaube, Sie auch jvisualvm verwenden können, nehmen Thread-Dumps ...
Ich weiß nicht, wie man die Ansätze macht, die du empfiehlst – Jim
Das sieht noch einfacher aus, aber es war bereits vorgeschlagen von aviad :): http://www.crazysquirrel.com/computing/java/basics/java-thread-dump.jspx –
Wie für den JVisualVM Ansatz - hier ist ein Tutorial http://docs.oracle.com /javase/6/docs/technotes/guides/visualvm/threads.html. Grundsätzlich ist jvisualvm nur eine ausführbare Datei, die im Ordner $ JAVA_HOME/bin gefunden werden kann. Führen Sie es aus, stellen Sie eine Verbindung zu Ihrer Anwendung her und sehen Sie, was Sie damit machen können. Ziemlich mächtige Sachen, wirklich :) –
- 1. Wie kann ich einen benutzerdefinierten Debugger debuggen?
- 2. Wie kann ich einen benutzerdefinierten Transformator debuggen
- 3. Wie WSGI von hängenden Apache
- 4. Wie man einen hängenden Thread innerhalb einer DLL korrekt beendet?
- 5. SSRS-Textfeld hängenden Einzug
- 6. Wie kann ich einen Kernel-Treiber-Absturz in Windows debuggen?
- 7. Wie kann ich einen regulären Ausdruck in Python debuggen?
- 8. Wie kann ich mit PyCharm einen Selleriearbeiter lokal debuggen?
- 9. Wie kann ich einen fehlgeschlagenen Frachttest in gdb debuggen?
- 10. Wie kann ich mvc4 Rasierer Ansichten debuggen?
- 11. Wie kann ich in RSpec besser debuggen?
- 12. Wie kann ich fehlerhafte Soap-Anfragen debuggen?
- 13. Wie debuggen Sie einen Bootloader?
- 14. Wie kann ich ein Schwein Skript debuggen
- 15. Wie kann ich Funkenanwendung lokal debuggen?
- 16. Paypal - Wie kann ich IPN lokal debuggen?
- 17. Wie kann ich exec() Probleme debuggen?
- 18. Wie kann ich diesen Segmentierungsfehler debuggen?
- 19. Wie kann ich PHP in IIS debuggen?
- 20. Wie debuggen Sie einen Deadlock?
- 21. Kann ich mit GDB einen laufenden Prozess debuggen?
- 22. Warum kann ich nicht debuggen?
- 23. Wie Debuggen ich AutoMapper.AutoMapperMappingException
- 24. erlang io: format und eine hängenden Webanwendung
- 25. Ausrichten von HTML-Überschriften mit hängenden Abschnittsnummern?
- 26. Plötzlich kann ich nichts in VS2010 debuggen
- 27. Jemand isst meine Fehler, wie kann ich es debuggen?
- 28. Wie kann ich ein Programm mit scanf mit DDD debuggen?
- 29. Wie kann ich eine laufende Kiosk-Modus-Chrome-Anwendung debuggen?
- 30. Wie kann ich beim Ausführen meines Programms in Valgrind debuggen?
sein nicht, dass Jim ist zu fragen, wird er fragt nach approch Debuggen –
@ user1348753, siehe bearbeiten – aviad
@aviad: Ich habe eine 'kill -3' und geladen den Javacore zu Samurai.Es gab keine visuelle Tabelle nur ein Protokoll repor Wie kann ich den Thread aus diesem Bericht verfolgen? – Jim