Tomcat线程转储

有没有从Tomcat采取线程转储 。 我想在某个时间监视Tomcat上正在运行的线程。

注意:我在Web逻辑上这样做但我不知道如何在Tomcat上完成它。

如果你使用Linux,你可以发送一个kill -3 [你的tomcat的pid],它将转储catalina.out中的所有当前线程。

将java melody添加到您的服务器https://code.google.com/p/javamelody/

它为您提供了很多信息,包括运行时的线程

有一种监视tomcat线程并执行转储的简单方法。 使用以下java选项启动tomcat:

 -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

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

!!!但是只在封闭/安全的环境中这样做 – 因为没有身份validation设置。!!!

请尝试使用netbeans profiler来分析任何Web应用程序。

https://profiler.netbeans.org/

http://wiki.netbeans.org/FaqProfilerAttachRemoteServer

以下步骤应该可以帮助您运行当前的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替换$JAVA_HOME您当前JDK的路径, $TOMCAT_USER与运行Tomcat的用户; 如果您传递错误的用户或甚至使用root,您将收到如下错误:

 3047: well-known file is not secure