【发布时间】:2020-02-19 11:40:21
【问题描述】:
我目前一直在尝试将 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```
【问题讨论】:
-
您使用的是哪个 JVM 版本?如果它是 8,那么由于解析 localhost 的问题,似乎不可能让 JMX 服务器运行。我已经使用 JVM 11 在 Fargate 容器中成功设置了远程 JMX 连接。确保端口在任务定义中公开,并且安全组允许此端口上的入站连接。另外,为了连接你的容器需要有一个公共 IP,并且你需要使用公共 IP 来连接到容器(它可以在容器的任务详细信息中找到)。
-
我使用的是 Java 11,JMX 端口也相应地暴露出来。然而,由于安全原因,容器只有一个私有 IP,我想这就是它失败的原因。
标签: java spring docker jmx aws-fargate