【问题标题】:Take thread dump of application without tomcat restart无需重启tomcat即可获取应用程序的线程转储
【发布时间】:2014-11-27 15:35:03
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

  • 是堆转储还是线程转储?标题与您的问题内容不符。
  • 线程转储,谢谢 :-)

标签: tomcat jmx jconsole jvisualvm jstack


【解决方案1】:

我会推荐 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

【讨论】:

  • 太好了,它有效!我要做的更多是使用完整的 jstack 位置执行命令[否则得到消息系统找不到指定的文件],并从管理员帐户运行此命令[否则得到无法安装 PDEXESVN 服务:访问被拒绝消息]。运行 psexec -s cmd.exe,并从中运行 jstack 也没有导致解决方案。谢谢!
【解决方案2】:

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

您必须是运行 Tomcat 服务的同一用户。

【讨论】:

  • 这是在windows机器上运行的(不同版本)
【解决方案3】:

常见问题:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 2011-08-10
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2014-12-24
    相关资源
    最近更新 更多