java - 如何分析在 cloud foundry 上运行的 spring boot webapp 的内存?

标签 java spring-boot cloud-foundry memory-profiling

我有一个在内部云代工厂空间上运行的 Spring 引导应用程序。 我想监视此 Web 应用程序的堆栈和堆内存,以便找到源自代码的 StackOverflow 异常。

分析应用程序的最佳方式是什么。

最佳答案

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/

相关文章:

Firebase Android 中的 java.lang.AbstractMethodError (FirebaseInstallationServiceClient.readGenerateAuthTokenResponse)

java - 使用 Gradle 和转义字符自动扩展属性

java - Hibernate/JPA - 仅在表存在时才对表进行操作

spring-boot - 如何追踪 infinispan NAKACK 协议(protocol)中突然出现的流量峰值?

java - 想象一个真实的并发场景,应该使用StringBuffer而不是StringBuilder?

java - 从适配器访问 SQLite Helper

java - tomcat7 在 ubuntu 中用 spring 循环请求。怎么修?

docker - 如何从私有(private)存储库重新启动 Cloud Foundry Docker 应用程序?

angularjs - 托管在 Pivotal Web 服务中的 Spring RESTful 没有 'Access-Control-Allow-Origin' 错误

sap - 尝试将第一个应用程序推送到 SAP,得到错误 "exceeded the total routes"。我该如何纠正?