是否可以从Tomcat中获取线程转储。我想在某个时间监视Tomcat上正在运行的线程。
注意:我在Web逻辑上这样做但我不知道如何在Tomcat上完成它。
答案 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线程并对其进行分析:
root@localhost:~# sudo -u $TOMCAT_USER $JAVA_HOME/bin/jstack -J-d64 -l $(ps aux | grep '[c]atalina' | awk '{print $2}') > ~/threads.log
注意:将$JAVA_HOME
替换为您当前运行Tomcat的用户的当前JDK路径$TOMCAT_USER
;如果您传递错误的用户或甚至使用root,您将收到如下错误:
3047: well-known file is not secure
答案 4 :(得分:0)
请尝试使用netbeans profiler来分析任何Web应用程序。