Tomcat线程转储

时间:2013-09-02 12:33:09

标签: java tomcat permgen thread-dump

是否可以从Tomcat中获取线程转储。我想在某个时间监视Tomcat上正在运行的线程。

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

5 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:5)

有一种监视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连接到上面选择的端口。
在这两个工具中,您还可以选择转储;)

!!!但仅在封闭/安全的环境中这样做 - 因为没有身份验证设置。!!!

答案 3 :(得分:1)

以下步骤应该可以帮助您运行当前的Java线程并对其进行分析:

  1. IBM Thread & Dump Monitor Analyzer
  2. 下载IBM JCA,它是一个很好的线程转储分析器
  3. 执行以下操作以获取Tomcat线程转储:root@localhost:~# sudo -u $TOMCAT_USER $JAVA_HOME/bin/jstack -J-d64 -l $(ps aux | grep '[c]atalina' | awk '{print $2}') > ~/threads.log
  4. 使用IBM Thread & Dump Monitor Analyzer
  5. 打开线程转储

    注意:$JAVA_HOME替换为您当前运行Tomcat的用户的当前JDK路径$TOMCAT_USER;如果您传递错误的用户或甚至使用root,您将收到如下错误:

    3047: well-known file is not secure
    

答案 4 :(得分:0)

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

https://profiler.netbeans.org/

http://wiki.netbeans.org/FaqProfilerAttachRemoteServer