有没有办法从Tomcat中获取线程转储(thread dump)? 我想在特定时间监视Tomcat中正在运行的线程。
注意:我在Weblogic上做过这件事,但不知道如何在Tomcat上完成。
有没有办法从Tomcat中获取线程转储(thread dump)? 我想在特定时间监视Tomcat中正在运行的线程。
注意:我在Weblogic上做过这件事,但不知道如何在Tomcat上完成。
有一种简单的方法来监控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连接。
在这两个工具中,您还可以选择“转储”选项;
!!!但是只有在关闭/安全环境中才可以这样做-因为没有设置身份验证。!!!
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
替换为您当前JDK的路径,将$TOMCAT_USER
替换为运行Tomcat的用户;如果传递错误的用户甚至使用root,则会收到如下错误:3047: well-known file is not secure
catalina.out
。 - Boris Treukhov