我有一个在内部云代工厂空间上运行的 Spring 引导应用程序。 我想监视此 Web 应用程序的堆栈和堆内存,以便找到源自代码的 StackOverflow 异常。
分析应用程序的最佳方式是什么。
最佳答案
- https://content.pivotal.io/blog/new-cloud-foundry-java-buildpack-improves-developer-diagnostic-tools
- https://community.pivotal.io/s/article/How-to-Remotely-Debug-Java-Applications-on-Cloud-Foundry
1。使用 JMX 设置运行您的应用
要在本地机器上测试分析,请使用以下 JMX 配置运行
theapp
,然后转到最后一步“3. VisualVM 配置”:java \ -Dcom.sun.management.jmxremote=true \ -Djava.rmi.server.hostname=localhost \ -Dcom.sun.management.jmxremote.port=9999 \ -Dcom.sun.management.jmxremote.rmi.port=9999 \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -jar theapp.jar ...
要将 JMX 配置传递给 CF 中的
theapp
,请使用JBP_CONFIG_JMX
环境变量(或如上所述带有参数的JAVA_OPTS
),manifest.yml
:applications: - name: theapp buildpack: java_buildpack env: JBP_CONFIG_JMX: "{enabled: true, port: 9999}" # JAVA_OPTS: "-Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
2。创建到应用程序容器的 SSH 隧道
cf ssh -N -T -L 9999:localhost:9999 theapp
3。可视化虚拟机配置
- 下载 VisualVM
- 运行 VisualVM:
visualvm --jdkhome "$JAVA_HOME"
- 添加 JMX 连接:
localhost:9999
你也可以使用PuTTY创建SSH隧道
- 检索并显示应用程序的 GUID:
cf app theapp --guid # example: 12345678-1234-1234-1234-123456789012
为 ssh 客户端获取一次性密码:
cf ssh-code # example: PolSkAjEzyKtrUdnA
创建 PuTTY SSH 连接:
- 主机名:
theapp.your.cloud
- 端口:
2222
- 用户名:
cf:<app-guid>/<app-instance-index>@ssh.your.cloud
- 例子:
cf:12345678-1234-1234-1234-123456789012/0@ssh.your.cloud
- 例子:
- 密码:
<ssh-code>
- 例子:
PolSkAjEzyKtrUdnA
- 例子:
- 连接/ssh/隧道/:
- 源端口:
9999
- 目的地:
127.0.0.1:9999
- 源端口:
- 主机名:
关于java - 如何分析在 cloud foundry 上运行的 spring boot webapp 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50154815/