基于 docker 部署的 Java 应用 jmx 无法远程访问的问题

发布于: 9 小时前

我们有一个跑在docker上的kafka因为要获得其内部的监控指标需要开启远程的jmx访问,根据Kafka的Monitoring文档配置了JMX_PORT 并把指定的端口从防火墙放行但是从远程仍然无法从远程访问,然后添加参数 java.rmi.server.hostname=192.168.1.1 指定了hostname仍然不行,最后从网上的一篇文档搜到了 com.sun.management.jmxremote.rmi.port 这个port也要指定并且可以和 com.sun.management.jmxremote.port(即 JMX_PORT)指定同一个端口,配置完之后就可以访问了。

要点如下:

  1. java.rmi.server.hostname 要指定可以远程访问的IP;

  2. 除了 com.sun.management.jmxremote.port 之外,com.sun.management.jmxremote.rmi.port 也要指定,否则系统会选一个随机端口,如果有防火墙的话这个随机端口很可能被防火墙挡住,其实不用docker部署也存在一样的问题。推荐两个端口配置成一样的。

最后完整的启动命令如下:

docker run --name jmxkafka -e KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.1.1 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999" -v /data:/data -v /config/server.properties:/opt/kafka/config/server.properties --network=host -d kafka

参考链接:

  1. Kafka官方文档:https://kafka.apache.org/documentation/#monitoring

  2. 性能监控之JMX监控docker中的java应用 https://cloud.tencent.com/developer/article/1465675

  3. Why Java opens 3 ports when JMX is configured? https://stackoverflow.com/questions/20884353/why-Java-opens-3-ports-when-jmx-is-configured/21552812#21552812

  4. hosts配置导致jmx无法连接远程jvm https://www.jianshu.com/p/b7790c9eabff

  5. Monitoring and Management Using JMX Technology https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

发布于: 9 小时前 阅读数: 6
用户头像

qihuajun

关注

还未添加个人签名 2009.05.15 加入

还未添加个人简介

评论

发布
暂无评论
基于docker部署的Java应用jmx无法远程访问的问题