Usage:
jstack [-l] <pid> (to connect to running process)
jstack -F [-m] [-l] <pid>(to connect to a hung process)
- For JRockit JVM we can use JRCMD command which comes with JDK Syntax:
jrcmd <jrockit pid> [<command> [<arguments>]] [-l] [-f file] [-p] -h]
9条答案
按热度按时间e5njpo681#
你也可以使用jstack(包含在JDK中)来获取线程转储,然后把输出写到你想要的任何地方,这在unix环境中是不可用的吗?
r7s23pms2#
线程转储将从执行
kill -3
的VM写入系统。如果要将JVM的控制台输出重定向到某个文件,则线程转储将位于该文件中。如果JVM在打开的控制台中运行,则线程转储将显示在其控制台中。ycl3bljg3#
有一种方法可以使用LogVMOutput诊断选项将中断信号时的JVM线程转储输出重定向到单独的文件:
euoag5mw4#
对于Java 8,
jcmd
是首选方法。以下是Oracle documentation的代码片段:
JDK 8版本引入了Java使命Control、Java Flight Recorder和jcmd实用程序,用于诊断JVM和Java应用程序的问题。建议使用最新的jcmd实用程序,而不是以前的jstack实用程序,以增强诊断功能并降低性能开销。
然而,与应用程序一起运送这可能是许可的含义,我不确定。
vof42yt15#
在JVM的stdout所在的相同位置。如果您有Tomcat服务器,这将是
catalina_(date).out
文件。isr3a4wc6#
当使用kill -3时,应该在标准输出中看到线程转储。大多数应用服务器将标准输出写入一个单独的文件。当使用kill -3时,应该在那里找到它。有多种方法可以获得线程转储:
kill -3 <PID>
:将输出提供给标准输出。jstack
命令生成线程转储。它是JDK的一部分。语法如下:z18hc3ub7#
在Jboss中,您可以执行以下操作
这会将输出/threadump重定向到上面命令中指定的文件控制台。
qyuhtwio8#
1.查找进程ID [PS ID]
1.执行jcmd [PS ID]线程。打印
3pvhb19x9#
如果要执行独立Java进程的线程转储,应遵循的步骤
**步骤1:**获取调用java程序的shell脚本的进程ID
**步骤2:**获取runABCD调用的子进程的进程ID。使用上面的PID获取查尔兹。
**步骤3:**获取特定进程的JSTACK。获取XYSServer进程的进程ID,例如8536