我知道spring会自动公开JMX bean。我能够使用 VisualVM 在本地访问它。
但是在产品上,我如何使用它的 JMX bean 远程连接到应用程序?是否有默认端口或者我应该另外定义任何东西?
谢谢,雷。
原文由 rayman 发布,翻译遵循 CC BY-SA 4.0 许可协议
我知道spring会自动公开JMX bean。我能够使用 VisualVM 在本地访问它。
但是在产品上,我如何使用它的 JMX bean 远程连接到应用程序?是否有默认端口或者我应该另外定义任何东西?
谢谢,雷。
原文由 rayman 发布,翻译遵循 CC BY-SA 4.0 许可协议
在“$JAVA_OPTS”(在您的应用程序中)中添加以下 JVM 属性:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=<PORT_NUMBER> -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=<HOST'S_IP>
在 Jconsole/Visual VM 中使用以下连接:
service:jmx:rmi:///jndi/rmi://<HOST'S_IP>:<PORT_NUMBER>/jmxrmi
它不会启用安全性,但会帮助您连接到远程服务器。
原文由 Arnab Biswas 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.2k 阅读
1 回答2.1k 阅读✓ 已解决
1 回答1.9k 阅读✓ 已解决
1.9k 阅读
2 回答1.2k 阅读
1 回答935 阅读
1 回答470 阅读
默认情况下,JMX 可以在本地自动访问,因此在 本地 运行
jconsole
将检测到所有本地 Java 应用程序而不会暴露端口。要通过 JMX 远程 访问应用程序,您必须指定 RMI 注册表端口。要知道的是,在连接时,JMX 在该端口上初始化, 然后 在 随机高 端口上建立数据连接,如果中间有防火墙,这是一个大问题。 (“嘿,系统管理员,打开一切,好吗?”)。
要强制 JMX 在您建立的同一端口上重新连接,您有以下几个选项。注意:您可以为 JMX 和 RMI 使用不同的端口,也可以使用相同的端口。
选项 1:命令行
如果您使用的是 Spring Boot,您可以将其放入您的
(appname).conf
文件中,该文件与您的(appname).jar
部署一起存在。选项 2:Tomcat/Tomee 配置
配置一个 JmxRemoteLifecycleListener :
马文罐子:
配置你的 server.xml:
选项 3:以编程方式配置
您将看到,诀窍是
serviceUrl
您在其中指定 jmx:rmi 主机/端口和 jndi:rmi 主机/端口。如果您同时指定两者,您将不会得到随机的高“问题”。编辑: 要使 JMX 远程工作,您需要做出关于身份验证的决定。最好分 3 个不同的步骤进行:1) 使用
-Dcom.sun.management.jmxremote.authenticate=false
进行基本设置,然后 2) 添加密码文件 (-Dcom.sun.management.jmxremote.password.file
)。 有关说明,请参见此处。 +-Dcom.sun.management.jmxremote.ssl=false
然后 3) 设置 SSL。