我有一个在远程计算机上的容器中运行的 Spring Boot 应用程序,我必须使用哪些 JVM 参数通过 Java Mission Control 或 JVisual VM(通过 JMX)连接到它?
使用以下 JAVA_OPTIONS 启动容器:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.rmi.port=7012
-Dcom.sun.management.jmxremote.port=7012
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=<public_ip>
此外,请确保公开在容器内侦听的相同端口(例如 docker run container -p 7012:7012 ...)
通过 Docker Compose,您可以使用环境
JAVA_OPTS
。在集群外部公开 JMX 端口是不安全的。
...
logging-filter:
image: docker.io/amusarra/eventbus-logging-filter-jaxrs:latest
container_name: logging-filter
networks:
- logging_filter_network
environment:
- JAVA_OPTS=-Dcom.sun.management.jmxremote.port=9091
-Dcom.sun.management.jmxremote.rmi.port=9091 -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=127.0.0.1
...
在这个存储库上,有一个完整的JMX配置示例。
关于 Java Flight Recorder 主题,红帽赞助了 Cryostat 项目,该项目是 Mission Control 的开源替代方案,允许在容器化环境中使用 Java Flight Recorder。我邀请您阅读文章使用 Cryostat 监控 Quarkus JVM 模式以了解更多详细信息。
本文展示了如何在容器环境中使用 Java JMX,特别是在 Red Hat OpenShift 上。