Tomcat线程转储

28

有没有办法从Tomcat中获取线程转储(thread dump)? 我想在特定时间监视Tomcat中正在运行的线程。

注意:我在Weblogic上做过这件事,但不知道如何在Tomcat上完成。

5个回答

41
如果您使用Linux操作系统,您可以发送kill -3 [您的Tomcat进程号],这样会将当前所有线程信息转储到catalina.out文件中。

10
我想补充一下,很可能是 catalina.out - Boris Treukhov
确实是一个不错的加法。 - Julien
3
好的,请提供需要翻译的内容。 - arun
请注意,您需要sudo访问权限。 - Sridhar Sarnobat

9

有一种简单的方法来监控Tomcat线程并进行转储。使用以下Java选项启动Tomcat:

-Dcom.sun.management.jmxremote.port=<some free port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

在重新启动tomcat后,您可以直接启动jconsole(jdk的一部分)或visualvm,并创建到您选择的端口的新的jmx连接。
在这两个工具中,您还可以选择“转储”选项;

!!!但是只有在关闭/安全环境中才可以这样做-因为没有设置身份验证。!!!


5

2
以下步骤应该帮助您获取当前正在运行的Java线程并进行分析:
  1. IBM Thread & Dump Monitor Analyzer下载IBM JCA,它是一个很好的线程转储分析工具。
  2. 执行以下命令以获取Tomcat线程转储:root@localhost:~# sudo -u $TOMCAT_USER $JAVA_HOME/bin/jstack -J-d64 -l $(ps aux | grep '[c]atalina' | awk '{print $2}') > ~/threads.log
  3. 使用IBM Thread & Dump Monitor Analyzer打开线程转储文件。
注意:请将$JAVA_HOME替换为您当前JDK的路径,将$TOMCAT_USER替换为运行Tomcat的用户;如果传递错误的用户甚至使用root,则会收到如下错误:
3047: well-known file is not secure

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接