views:

1777

answers:

4

I like to generate a thread dump programmatically. I've learned that there a basically two ways to do it:

  1. Use the "Java Virtual Machine Tool Interface" JVM-TI
  2. Use the higher abstracted "Java Debugger Interface" JDI

For the JVM-TI I was able to find some useful information, but I would have to write a JNI-DLL which, at least for the moment, I would like to avoid. With the JDI I can use Java and it seems I'm able to use it from within the application. But I wasn't able to find some kind of tutorial or HOWTO for it. The only documentation I could find, were the Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ which isn't very helpful, because it doesn't show me how to use this classes.

So, does anybody know of a good tutorial/book I could read?

Thx for any help!

+1  A: 
VonC
Thanks, now at least I have a specific forum where I can ask!
BugSlayer
You're welcome. If this is the most helpful approach, do not forget to accept this answer ;)
VonC
+3  A: 

There is a third way: Thread.getAllStackTraces()

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

This is much easier than the debugger interface...

jiriki
A: 

Thread.getAllStackTraces() dumps only the execution trace of all the threads, but doesn't give the information of object locks that have been obtained by a particular thread or the lock on which a particular thread has been waiting. Basically, we'll not be able to nail down deadlocks with this.

A: 

You can get just about all the Thread info you need including deadlocks from http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Robert J Saulnier