是否可以从 Tomcat中获取线程转储?我想在某个时间点监控Tomcat中运行的线程。
注意:我在 Web 逻辑上执行此操作,但我不知道如何在 Tomcat 上执行此操作。
是否可以从 Tomcat中获取线程转储?我想在某个时间点监控Tomcat中运行的线程。
注意:我在 Web 逻辑上执行此操作,但我不知道如何在 Tomcat 上执行此操作。
如果您使用 Linux,您可以发送 kill -3 [您的 tomcat 的 pid],它将转储 catalina.out 中的所有当前线程。
有一种简单的方法可以监视 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 连接到您在上面选择的端口。
在这两种工具中,您还可以选择进行转储;)
!!!但只能在封闭/安全的环境中这样做 - 因为没有设置身份验证。!!!
将 Java 旋律添加到您的服务器 https://code.google.com/p/javamelody/
它为您提供了很多信息,包括运行时的线程
以下步骤应该可以帮助您运行当前的 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
为当前 JDK 的路径,$TOMCAT_USER
使用运行 Tomcat 的用户;如果您传递了错误的用户,甚至使用 root,您将收到如下错误:
3047: well-known file is not secure
请尝试使用 netbeans 分析器来分析任何 Web 应用程序。