java - 如何在Cloud Foundry上获取java应用程序的threaddump?

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

我尝试了几个选项

a. 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
策略工具
unpack200 jvmkill-1.16.0_RELEASE
rmid
keytool
rmiregistry

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

最佳答案

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

最糟糕的部分是cf logs会在每行的开头注入(inject)一些额外的文本,这使得将线程转储加载到工具中变得困难。你通常可以用 cut 去掉它。或awk ,或者您可以重定向 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 构建包安装了 JRE,这些工具不再随 OpenJDK JRE 一起提供,并且出于法律原因不能与其捆绑在一起。如果您愿意这样做,您可以 scp将工具和所需的共享库从 JDK 上传到应用程序容器并运行它们,但这是一项繁重的工作,而且并不有趣。我对 cf java 不太熟悉插件,但我怀疑它尝试使用这些工具,这些工具曾经可用,但不再存在。

关于java - 如何在Cloud Foundry上获取java应用程序的threaddump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59318654/

相关文章:

java - JDBC驱动程序实现和类加载

java - Lejos - 找不到符号 Tachopilot

cloud - 使用 contextBroker 和 IoTAgent 配置 VM

amazon-web-services - 1、参数groupName不能与参数subnet一起使用

linux - Linux 上的 Bluemix CLI - websocket : bad handshake

postgresql - 如何使用 Java Main 将 jar 添加到 CloudFoundry java buildpack 的类路径

java - Android FragmentManager BackStackRecord.run 抛出 NullPointerException

iis - ASP.Net 应用程序的高可用性

grails - 在 CloudFoundry 上启动 Grails 应用程序时为 "state is undetermined"

Java 相当于 javascript 中的返回函数