【问题标题】:How to obtain threaddump of a java application on Cloud foundry?如何在 Cloud Foundry 上获取 java 应用程序的线程转储?
【发布时间】:2019-12-13 08:23:49
【问题描述】:

我尝试了几个选项

一个。 cf java thread-dump myapp -i0(只有 1 个实例,所以 0)
回应没什么。 myapp 显示的日志 2019-12-13T14:52:41.15+0800 [SSH/0] OUT 成功远程访问 10.x.x.x:35764 2019-12-13T14:52:41.84+0800 [SSH/0] OUT 10.x.x.x:35764 的远程访问结束

b.我做了cf ssh myapp

/home/vcap/app/.java-buildpack/open_jdk_jre/bin/ 没有 jstack 并且 jmap 命令也不起作用 /home/vcap/app/.java-buildpack/open_jdk_jre/bin/ 有以下组件

java
orbd servertool
java-buildpack-memory-calculator-3.13.0_RELEASE
pack200
tnameserv
jjs
policytool
unpack200 jvmkill-1.16.0_RELEASE
rmid
密钥工具
rmiregistry

问题是->如何获取java threaddump?

【问题讨论】:

    标签: java cloud cloud-foundry thread-dump sap-cloud-foundry


    【解决方案1】:

    我相信最简单的选择是运行cf logs 来查看您的应用日志。然后在第二个终端中,cf ssh 到应用程序并运行 ps aux 并查找 Java 进程的进程 ID。然后运行kill -3 <pid>。您的 Java 进程将捕获此信号并发出线程转储。它将转到 STDOUT,后者方便地转到您应用的日志流,因此它应该显示在第一个终端中。

    这方面的糟糕之处在于cf logs 会在每一行的开头注入一些额外的文本,这使得很难将线程转储加载到工具中。您通常可以使用 cutawk 将其删除,或者您可以将 cf logs 重定向到文件,使用文本编辑器打开并查找/替换前导文本。

    除了你有几个其他的选择:

    • 如果您使用的是 Spring,请启用 Spring Boot Actuators。然后,您可以使用/actuator/threaddump 端点生成和下载线程转储(请注意,此格式是 JSON,不是标准格式)

    • 使用 APM 工具或分析器,如 NewRelic、AppDynamics、Dynatrace 或 YourKit。 Java buildpack 很好地支持这些,并且大多数都可以正常工作。

    • 使用 JMX。使用 Java buildpack 很容易启用,只需将环境变量 JBP_CONFIG_JMX 设置为 '{enabled: true}' 并重新加载您的应用程序。启用后,您可以使用cf ssh -N -T -L 5000:localhost:5000 <APP_NAME> 打开隧道。然后打开jvisualvm,与“localhost:5000”建立一个新的“本地”JMX 连接并连接。单击“线程”选项卡,然后单击“线程转储”按钮。它在穿过隧道时可能会有点慢,但是给它几秒钟的时间来完成,你应该有一个线程转储。

    在 Cloud Foundry 上不起作用的是 jstackjcmd。在撰写本文时,Java buildpack 安装了 JRE,这些工具不再随 OpenJDK JRE 一起提供,并且出于法律原因不能与它捆绑在一起。如果您愿意这样做,您可以scp 工具和所需的共享库,从 JDK 到您的应用程序容器并运行它们,但这是很多工作而且不好玩。我对cf java 插件不是很熟悉,但我怀疑它会尝试使用这些工具,这些工具曾经可用,现在已经不存在了。

    希望有帮助!

    【讨论】:

      【解决方案2】:

      您应该能够使用 kill -3 <PID> 获取 ThreadDumps 并在堆分析器中打开它,例如 eclipse memory analyzer (MAT) 并选择 Thread Stacks

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多