如何在 JVM 上激活 JMX 以使用 jconsole 进行访问?
原文由 Mauli 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 JVM 上激活 JMX 以使用 jconsole 进行访问?
原文由 Mauli 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Docker 容器中运行会引入一系列额外的连接问题,因此希望这对某人有所帮助。我最终需要添加以下选项,我将在下面解释:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=${DOCKER_HOST_IP}
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.rmi.port=9998
DOCKER_HOST_IP
与在本地使用 jconsole 不同,您必须通告一个与您可能从容器中看到的不同的 IP。您需要将 ${DOCKER_HOST_IP}
替换为您的 Docker 主机的外部可解析 IP(DNS 名称)。
JMX 远程和 RMI 端口
看起来 JMX 还需要访问远程管理接口 ( jstat ),该接口在仲裁连接时 使用不同的端口 来传输一些数据。我没有在 jconsole
中看到任何明显的地方来设置这个值。在链接的文章中,过程是:
jconsole
启用日志记录连接jconsole
试图使用iptables
/ firewall
规则以允许该端口连接虽然这可行,但它肯定不是一个可自动化的解决方案。我选择从 jconsole 升级到 VisualVM ,因为它可以让您明确指定运行 jstatd
的端口。在 VisualVM 中,添加一个新的远程主机并使用与上面指定的相关的值更新它:
然后右键单击新的远程主机连接和 Add JMX Connection...
不要忘记选中 Do not require SSL connection
的复选框。希望这能让您建立联系。
原文由 Joel B 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
相关文档可以在这里找到:
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
使用以下参数启动程序:
例如像这样:
-Dcom.sun.management.jmxremote.local.only=false
不一定是必需的,但没有它,它在 Ubuntu 上不起作用。错误将是这样的:请参阅 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6754672
还要小心
-Dcom.sun.management.jmxremote.authenticate=false
它使任何人都可以访问,但如果你只用它来跟踪本地机器上的 JVM,那就没关系了。更新:
在某些情况下,我无法连接到服务器。如果我也设置了这个参数,这个问题就被修复了:
-Djava.rmi.server.hostname=127.0.0.1