如何通过JMX连接到远程Docker容器

问题描述 投票:0回答:2

我有一个在远程计算机上的容器中运行的 Spring Boot 应用程序,我必须使用哪些 JVM 参数通过 Java Mission Control 或 JVisual VM(通过 JMX)连接到它?

java docker jmx jvisualvm java-mission-control
2个回答
9
投票

使用以下 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 ...)


0
投票

通过 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 上。

© www.soinside.com 2019 - 2024. All rights reserved.