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应用程序。
以下步骤应该可以帮助您运行当前的Java线程并对其进行分析:
- 从IBM Thread&Dump Monitor Analyzer下载IBM JCA,它是一个很好的线程转储分析器
- 执行以下命令获取Tomcat线程转储:
root@localhost:~# sudo -u $TOMCAT_USER $JAVA_HOME/bin/jstack -J-d64 -l $(ps aux | grep '[c]atalina' | awk '{print $2}') > ~/threads.log
- 使用IBM Thread&Dump Monitor Analyzer打开线程转储
注意:将$JAVA_HOME
替换$JAVA_HOME
您当前JDK的路径, $TOMCAT_USER
与运行Tomcat的用户; 如果您传递错误的用户或甚至使用root,您将收到如下错误:
3047: well-known file is not secure
- Netbeans 7.3.1的代码完成设置?
- 使用PowerMock模拟私有方法,但仍会调用底层方法
- 为什么我们不能调用servlet构造函数而不是init方法来初始化配置参数?
- ClassLoader.getResources在Weblogic / Spring应用程序上返回一个空的Enumeration
- 用按钮单击关闭JFrame
- Apache CXF将支持基于JAX-RPC的Web服务(SOAP)
- ClassLoader泄漏 – 他们值得解决吗?
- 为hibernate 3.6配置pom.xml
- 即使httpCon.setRequestMethod(“GET”),HttpURLConnection也会发送POST请求; 已设定