我有一个运行作为Windows服务的Tomcat,并且已知这些不能与jstack一起运行。另一方面,jconsole运行良好,我可以看到各个线程的堆栈(我正在连接到“localhost:port”来访问它)。
如何使用jconsole或类似工具将所有线程堆栈转储到文件中? (类似于jstack)
答案 0 :(得分:5)
您可以使用ThreadMXBean管理界面。
此FullThreadDump类演示了获取完整线程转储的能力,并使用JMX远程检测死锁。
答案 1 :(得分:5)
现在您可以使用jvisualvm工具通过JMX连接到远程JVM并创建线程转储。不知道这是否可用
答案 2 :(得分:3)
这是另一个将堆栈转储写入文件的代码示例:
我们在JMX上使用它来为我们提供您在发出JMX请求时获得的堆栈转储的近似值,或者该过程是否检测到高意外负载。
答案 3 :(得分:1)
如果您进行飞行录制以更深入地了解JVM行为,特别关注Hot Methods,将会很有帮助。
通常,半小时的录音就足够了。要触发录制,您必须登录到计算机,然后发出以下命令:
如果使用Java HotSpot 1.8.x:
$ JAVA_HOME / bin / jcmd VM.unlock_commercial_features $ JAVA_HOME / bin / jcmd JFR.start duration = 1800s settings = profile filename = / tmp / recording.jfr
如果使用java HotSpot 1.7.x:
通过在JVM启动时添加以下参数来编辑$ HOME / conf / wrapper.conf文件:
wrapper.java.additiona = - XX:+ UnlockCommercialFeatures wrapper.java.additional。= - XX:+ FlightRecorder
(替换为相应的位置编号)
然后,重新启动实例。完成后,发出以下命令:
$ JAVA_HOME / bin / jcmd JFR.start duration = 1800s settings = profile filename = / tmp / recording.jfr
飞行记录将在终止时在/tmp/recording.jfr上生成一个文件。