Thread dump programmatically /JDI (Java Debugger Interface)

前端 未结 4 1559
野的像风
野的像风 2020-12-05 21:41

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-
相关标签:
4条回答
  • 2020-12-05 21:52

    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

    0 讨论(0)
  • 2020-12-05 21:54

    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...

    0 讨论(0)
  • 2020-12-05 22:05

    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.

    0 讨论(0)
  • 2020-12-05 22:10

    Did you consider the remote alternative ? I.e. VisualVM

    thead dump with visualVM

    jps and jstack are also useful tools included in JDK 5, providing a quick command line method for obtaining stack traces of all current threads.

    This article suggest JDI is also used as a remote tool.

    So I am not sure you can triggers a thread dump within your own program, instead you find a way to send to yourself a SIGQUIT signal (kill -3) on Unix platforms, or press the Ctrl-\ key on Unix or Ctrl-Break on Windows platforms.

    Plus, JDI wasn't intended to be used to debug the same process in which the JDI client is running. Still this thread I just linked to is the closest I have found to actually use JDI within the same program.

    0 讨论(0)
提交回复
热议问题