如何获取Java Web Start应用程序的线程转储?如果可以,如何获取?
如果有一个简单的解决方案,使非开发人员(客户)能够创建线程转储,那将是很好的。或者,是否可以通过编程方式创建线程转储?
在Java Web Start控制台中,我可以通过按“t”键来获取线程列表,但不包括堆栈跟踪。
如果答案需要特定的Java版本,请说明。
如何获取Java Web Start应用程序的线程转储?如果可以,如何获取?
如果有一个简单的解决方案,使非开发人员(客户)能够创建线程转储,那将是很好的。或者,是否可以通过编程方式创建线程转储?
在Java Web Start控制台中,我可以通过按“t”键来获取线程列表,但不包括堆栈跟踪。
如果答案需要特定的Java版本,请说明。
t: dump thread list
v: dump thread stack
这在JDK6下有效。不确定其他版本。
另外,在JDK5(以及可能更早的版本)中,您可以将所有线程的完整堆栈跟踪发送到标准输出:
在Windows下:在Java控制台中键入ctrl-break。
在Unix下:kill -3 <java_process_id>
(例如:kill -3 5555)。这不会终止您的应用程序。
还有一件事情:正如其他人所说,您可以通过Thread
类以编程方式获取堆栈,但是要注意在JDK6之前的Thread.getAllStackTraces()
存在内存泄漏问题。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6434648
谢谢,
scotty
尝试
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
Thread.getAllStackTraces()
获取一个Map
进行迭代。sun.*
包并查看是否有任何有趣的内容。
Thread.currentThread().dumpStack();
这将打印堆栈跟踪至System.out