基于 docker 部署的 Java 应用 jmx 无法远程访问的问题
我们有一个跑在 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
)指定同一个端口,配置完之后就可以访问了。
要点如下:
java.rmi.server.hostname
要指定可以远程访问的 IP;除了
com.sun.management.jmxremote.port
之外,com.sun.management.jmxremote.rmi.port
也要指定,否则系统会选一个随机端口,如果有防火墙的话这个随机端口很可能被防火墙挡住,其实不用 docker 部署也存在一样的问题。推荐两个端口配置成一样的。
最后完整的启动命令如下:
参考链接:
Kafka 官方文档:https://kafka.apache.org/documentation/#monitoring
性能监控之 JMX 监控 docker 中的 java 应用 https://cloud.tencent.com/developer/article/1465675
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
hosts 配置导致 jmx 无法连接远程 jvm https://www.jianshu.com/p/b7790c9eabff
Monitoring and Management Using JMX Technology https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html
版权声明: 本文为 InfoQ 作者【qihuajun】的原创文章。
原文链接:【http://xie.infoq.cn/article/2d2ab42cc7ca29d7218719795】。文章转载请联系作者。
评论