2010-10-18 14 views
7

我有一个作为Windows服务运行的Tomcat,并且这些已知不能与jstack一起使用。另一方面,jconsole运行良好,我可以看到各个线程的堆栈(我连接到“localhost:port”来访问它)。如何通过JMX创建线程转储?

如何使用jconsole或类似工具将所有线程堆栈转储到文件中? (类似于jstack)

回答

3

这里的另一个代码示例,会写一个堆栈转储到一个文件:

http://pastebin.com/zwcKC0hz

我们用这个了JMX给我们堆栈的近似值甩了你当你得到JMX请求或进程检测到高的意外负载。

4

现在,您可以使用jvisualvm工具通过JMX连接到远程JVM并创建线程转储。不知道这是否是可用的

Java VisualVM

+1

这是令人难以置信的缓慢:( – 2015-11-27 06:29:54

1

,如果你把一个飞行记录,以获取有关JVM行为更深的看法,特别是集中于热点方法这将是有益的。

通常情况下,录制半小时就足够了。触发录像,你必须在机器上登录,并发出以下命令:

如果使用Java HotSpot的1.8.x的:

$ JAVA_HOME /斌/ jcmd VM.unlock_commercial_features $ JAVA_HOME/bin中/ jcmd JFR.start持续时间= 1800 =设置文件名的个人资料=的/ tmp/recording.jfr

如果使用的Java HotSpot的1.7.x:

编辑你的$ HOME/conf目录/ wrapper.conf文件中加入以下JVM启动时的参数:

wrapper.java.additiona = - XX:+ UnlockCommercialFeatures wrapper.java.additional = - XX:+ FlightRecorder

(与相应的位置编号替换)

然后,已重新启动你的实例。一旦完成,发出以下命令:

$ JAVA_HOME /斌/ jcmd JFR.start持续时间= 1800 =设置文件名的个人资料=的/ tmp/recording.jfr

飞行记录西港岛线产生一个文件/ tmp/recording.jfr终止后。