java - 在 AWS Fargate 中监控 JVM

标签 java spring docker jmx aws-fargate

我目前一直在尝试将 VisualVM(一个监控 JVM、堆和内存使用等的程序)连接到在 Docker 容器中的 AWS Fargate 上运行的 Spring Boot 应用程序(Java 应用程序)。

我已经相应地公开了 JMX 端口,并且在本地运行 Docker 容器时能够通过 JMX 端口进行连接。但是,在 Fargate 上运行 Java App 时,我还没有找到通过 JMX 连接到 Container 的方法。我试过设置 VM 参数
-Djava.rmi.server.hostname 到容器的 IP 地址,但是当我尝试通过 JMX 连接时,它仍然无法连接。有没有人有这方面的经验?

JMX 命令供引用:

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.17.0.2 \
-Dcom.sun.management.jmxremote.port=9090\
-Dcom.sun.management.jmxremote.rmi.port=9090\
-jar java-api.jar server```

最佳答案

在将 Visual VM 连接到部署在 AWS Fargate(私有(private) VPC)中的 Spring Boot 应用程序方面,以下更改对我有用

  • jvm参数
  • -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=1099 \
    -Dcom.sun.management.jmxremote.rmi.port=1099 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Dcom.sun.management.jmxremote.local.only=false \
    -Djava.rmi.server.hostname=127.0.0.1
    
  • 导出端口 1099(在 dockerfile 和 cloudformation 模板中 - PortMappings->ContainerPort)
  • 容器安全组接受来自 vpc(跳转服务器)中现有 EC2 之一的 1099(tcp 和 udp)上的传入流量
  • 通过使用 EC2(跳转服务器)将 ssh 端口转发到在 fargate 中运行的任务(使用在 fargate 中运行的任务的私有(private) ip)

  • 在本地运行以下命令
    ssh -l <user> -L 127.0.0.1:1099:<task-private-ip-in-fargate>:1099 <ec2-ip(jump server)>
    
  • 在 127.0.0.1:1099
  • 上使用 JMX 连接连接 VisualVM

    关于java - 在 AWS Fargate 中监控 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60299557/

    相关文章:

    java - 当我将字符串从 Javascript 传递到 Java applet 时,字符串会发生奇怪的变化

    java - 什么是 Vaadin UI 以及如何在 UI 之间导航

    java - POST 后将应用程序重定向到其他服务器

    mysql - 如何在Spring Batch中进行多个查询(具体使用LAST_INSERT_ID())

    java - Spring FeignClient - 将 RESTful xml 响应视为 JSON

    docker - Docker错误在构建文件后无法复制文件

    node.js - Docker Nodejs Redis 连接到 127.0.0.1 :6379 failed

    java - Cypress EZ-USB FX CY3671 的替代品

    java - JSF 2.0 注释不起作用

    docker - 按 docker stats 中的内存使用情况排序