在没有tomcat重启的情况下获取应用程序的线程

时间:2014-11-27 15:35:03

标签: tomcat jmx jconsole jvisualvm jstack

我不得不在tomcat中创建web应用程序的线程转储作为服务运行而无需重启tomcat。我试图附加jconsole,jvisualvm,jstack,但没有成功。

  • Tomcat未启用jmx远程。 (但不能引入属性 - 无法重启)
  • 我尝试从与服务相同的用户执行应用程序,更改TEMP,TMP文件夹
  • 我想在本地执行它 - 在与tomcat相同的服务器上,因为不需要任何配置(因此不会重新启动)(“注意:只有当您要远程监视Tomcat时才需要此配置。如果您需要,则不需要此配置。您将使用Tomcat运行的同一用户在本地监视它。“)
  • 在jConsole中,流程显示为灰色,有时不可见 - 无法附加
  • 在jStack中:内存不足或附加的特权不足
  • Tomcat正在Windows机器上运行

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我会推荐jcmd,但我认为它与jstat和其他工具的本地附加存在同样的问题。

根据以下两个谷歌点击率," psexec -s jstack PID"似乎是一个解决方案 (我还没试过)

https://www.assetbank.co.uk/support/documentation/knowledge-base/how-to-take-a-java-thread-dump/ https://access.redhat.com/solutions/19170

答案 1 :(得分:1)

如果在Unix上运行,请发送kill -3 <pid>。这会将线程转储打印到catalina.out

您必须与运行Tomcat服务的用户相同。

答案 2 :(得分:0)

常见问题: