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

哪个类用于打印JVM Java虚拟机的线程转储?,java,jvm,jvm-arguments,jvm-languages,jvm-crash,Java,Jvm,Jvm Arguments,Jvm Languages,Jvm Crash,我想生成正在运行的应用程序的线程转储。但是,当我执行kill-3PID时,它会在运行应用程序的控制台上生成线程转储 我想把它生成一个文件。我知道我可以作为./run.sh>thread\u dump运行应用程序,也可以使用jstack实用程序将其重定向到文件 然而,我不想使用任何这些。在另一种方法中,我通过以下方式将控制台的完整输出重定向到一个文件: File file = new File("out.txt"); FileOutputStream fos = n

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

我想把它生成一个文件。我知道我可以作为./run.sh>thread\u dump运行应用程序,也可以使用jstack实用程序将其重定向到文件

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

            File file = new File("out.txt");
    FileOutputStream fos = new FileOutputStream(file);
    PrintStream ps = new PrintStream(fos);
    System.setOut(ps);
现在,每个输出都写入out.txt。但是,当我执行kill-3时,它仍然会将线程转储写入控制台

我在第三种方法中遗漏了什么?有谁知道,当在JVM上调用kill-3时,调用了什么类/源,这样我就可以了解在发出kill-3请求/命令时线程转储是如何准确编写的

您需要使用该选项来转储正在运行的应用程序的堆转储。oracle网站上有一个有趣的博客,介绍如何以编程方式从Java应用程序转储堆


此源完全在C++中的JVM中。您需要有一个OpenJDK的构建,您可以将其修改为转储到文件中。顺便说一句,您可以使用JMX和thread.getAllStackTraces()等编写自己的线程转储,但这不会由
kill-3
触发。那么,默认情况下,tomcat如何将线程转储写入文件。我的意思是tomcat如何将线程转储写入catalina.out文件。查看catalina.sh,它运行java时将输出重定向到catalina.out。他们使用你在第二段中提到的解决方案。