2010-10-18 10 views
7

Ich habe einen Tomcat läuft als Windows-Dienst, und diese sind bekannt, nicht gut mit Jstack zu arbeiten. jconsole funktioniert dagegen gut, und ich kann Stapel einzelner Threads sehen (ich verbinde mich mit "localhost: port", um darauf zuzugreifen).Wie erstelle ich einen Thread-Dump über JMX?

Wie kann ich jconsole oder ein ähnliches Tool verwenden, um alle Threadstapel in eine Datei zu speichern? (ähnlich wie jstack)

Antwort

5

Sie können die Managementschnittstelle ThreadMXBean verwenden.

Diese Klasse FullThreadDump demonstriert die Möglichkeit, einen vollständigen Thread-Dump zu erhalten und Deadlock mithilfe von JMX remote zu erkennen.

3

Hier ist ein weiteres Codebeispiel, das ein Stapelabbild in eine Datei schreiben wird:

http://pastebin.com/zwcKC0hz

Wir verwenden diese über JMX uns eine Annäherung des Stapels geben Sie Dump, wenn Sie machen eine JMX-Anfrage oder wenn der Prozess eine hohe, unerwartete Belastung erkennt.

4

Heutzutage können Sie das Tool jvisualvm verwenden, um über JMX eine Verbindung zu Ihrer Remote-JVM herzustellen und einen Thread-Dump zu erstellen. Sie wissen nicht, ob diese

Java VisualVM

+1

Es ist unglaublich langsam :( –

1

verfügbar war es wäre hilfreich, wenn Sie einen Flug Aufnahme nehmen einen tieferen Blick auf die JVM Verhalten zu erhalten, speziell auf den Hot Methoden konzentrieren.

Normalerweise ist eine Aufnahme von einer halben Stunde genug. Um eine Aufnahme auszulösen, müssen Sie in den Maschinen angemeldet sein, und geben Sie den folgenden Befehl ein:

Wenn Java HotSpot 1.8.x mit:

$ JAVA_HOME/bin/jcmd VM.unlock_commercial_features $ JAVA_HOME/bin/jcmd JFR.start Dauer = 1800. Einstellungen = Profil filename =/tmp/recording.jfr

IF Java HotSpot 1.7.x mit:

Bearbeiten Sie Ihre $ HOME/conf/wrapper.conf Datei, indem Sie das folgende Parameter beim JVM-Start:

wrapper.java.additiona = - XX.: + UnlockCommercialFeatures wrapper.java.additional = - XX.: + Flight

(ersetzen mit der entsprechenden Positionsnummer)

Dann haben Ihre Instanzen neu gestartet. Ist das erledigt, geben Sie den folgenden Befehl ein:

$ JAVA_HOME/bin/jcmd JFR.start Dauer = 1800er Einstellungen = Profil filename =/tmp/recording.jfr

Die Flugaufzeichnung einer Datei erzeugen wil auf/tmp/recording.jfr bei Kündigung.