Frage

Ich mag programmatisch ein Thread-Dump zu erzeugen. Ich habe gelernt, dass es eine im Wesentlichen zwei Möglichkeiten, es zu tun:

  1. Verwenden Sie die "Java Virtual Machine Tool Interface" JVM-TI
  2. Verwenden Sie die höher abstrahierte "Java Debugger Interface" JDI

Für die JVM-TI konnte ich einige nützliche Informationen finden, aber ich würde eine JNI-DLL schreiben müssen, die zumindest für den Moment würde ich gerne vermeiden. Mit der JDI kann ich Java verwenden und es scheint, ich bin in der Lage, es zu benutzen aus der Anwendung heraus. Aber ich war nicht in der Lage, eine Art von Tutorial oder HOWTO für sie zu finden. Die einzige Dokumentation die ich finden konnte, waren die Java-Docs http: //java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ , die nicht sehr hilfreich ist, weil es mir nicht zeigen, wie diese Klassen verwenden.

Also, weiß jemand von einem guten Tutorial / Buch, das ich lesen konnte?

Thx für jede Hilfe!

War es hilfreich?

Lösung

Haben betrachten Sie die Remote-Alternative? D. h VisualVM

thead Dump mit VisualVM

JPS und jstack sind auch nützliche Werkzeuge in JDK 5 enthalten ist, eine schnelle Befehlszeile Verfahren zur Bereitstellung von Erhalten Stapel Spuren aller aktuellen Threads.

Dieser Artikel vorschlagen JDI auch als verwendet wird Remote-Tool .

Also ich bin nicht sicher, können Sie einen Thread-Dump in Ihrem eigenen Programm löst, statt finden Sie einen Weg, um sich selbst ein SIGQUIT Signal zu senden (kill -3) auf Unix-Plattformen, oder die Strg- \ Taste auf Unix drücken oder Ctrl-Break auf Windows-Plattformen.

Plus, JDI nicht den gleichen Prozess debuggen verwendet werden soll in dem der JDI-Client ausgeführt wird . Noch in diesem Thread ich gerade verbunden ist die nächste, die ich eigentlich JDI gefunden habe innerhalb des gleichen Programms verwenden.

Andere Tipps

Es gibt einen dritten Weg: Thread.getAllStackTraces ()

http: // java. sun.com/javase/6/docs/api/java/lang/Thread.html#getAllStackTraces ()

Das ist viel einfacher als die Debugger-Schnittstelle ...

Sie können nur erhalten über alle Themen-Info benötigen Sie einschließlich Deadlocks von http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Thread.getAllStackTraces () Dumps nur die Ausführung Spur von allen Threads, aber den Informationen von Objektsperren nicht geben, die von einem bestimmten Thread oder der Sperre erhalten worden waren, auf das ein bestimmten Thread gewartet hat. Grundsätzlich werden wir nicht in der Lage sein, Deadlocks festzunageln mit diesem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top