哪个类用于打印JVM Java虚拟机的线程转储?

时间:2013-07-29 08:37:34

标签: java jvm jvm-arguments jvm-languages jvm-crash

我想生成正在运行的应用程序的线程转储。但是,当我确实杀死-3 PID时,它会在正在运行的应用程序的控制台上生成线程转储。

我想将其生成为文件。我知道我可以运行应用程序./run.sh> thread_dump或我也可以使用jstack实用程序将其重定向到文件。

但是,我不想使用其中任何一种。在另一种方法中,我通过以下方式将控制台的完整输出重定向到文件:

            File file = new File("out.txt");
    FileOutputStream fos = new FileOutputStream(file);
    PrintStream ps = new PrintStream(fos);
    System.setOut(ps);

现在每个输出都写在out.txt中。但是,当我确实杀-3时,它会将线程转储写入控制台。

我在第三种方法中缺少什么?有人知道,在JVM上调用kill -3时会调用哪个类/源,这样我就可以看一下如何在制作kill -3请求/命令时写入线程转储?

1 个答案:

答案 0 :(得分:0)

您需要使用jmap -dump选项转储正在运行的应用程序的堆转储。这是oracle网站上一个有趣的博客,描述了如何以编程方式从Java应用程序转储堆。

https://blogs.oracle.com/sundararajan/entry/programmatically_dumping_heap_from_java