解释 JMX 网址

2022-08-31 11:39:07

我正在尝试理解 JMX 服务 URL。

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi

如果有人能帮助我理解这一点,那就太好了。

谢谢


答案 1

我将重用我之前为这个问题写的答案:无法通过Java6中的jconsole连接到Tomcat的MBeanServer。

它不完整,但可能会有所帮助:

假设您在“目标机器”上运行 JMX 服务器(别名“JMX 代理”别名“要连接到的 JVM”),其中 RMI 注册表端口位于“RMI 注册表端口”,JMX RMI 服务器端口位于“JMX RMI 服务器端口”。

注意:

  1. RMI注册表告诉JMX客户端在哪里可以找到JMX RMI服务器端口;可以在键下获取信息。jmxrmi
  2. RMI 注册表端口通常称为 RMI 注册表端口,因为它是在 JVM 启动时通过系统属性设置的。
  3. JMX RMI服务器端口通常为人所知,因为JVM会随机选择它(如果没有采取其他预防措施)。

以下 URI 将导致连接成功(经过测试)

service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

这看起来很讨厌。让我们把它切开。

此 URI 是 RFC2609“服务定位协议 URL”(好吧,它实际上是一个 URI,对吧?)

它由以下部分组成:

  • service- 一个常量
  • jmx:rmi- 服务类型由以下部分组成:抽象类型URL方案jmx rmi
  • 其余的 - sap(服务访问协议规范)

汁液分解为:

  • //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>- 易普赛特
  • /jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi- 网址部分

一个消息灵通的JMX客户端连接到“ipsite”进行JMX-over-RMI交换;但是不知道该端口的JMX客户端呢?耐心。。。

URL 部分分解为:

  • /jndi/- 这似乎告诉 JMX 客户端,它可以在以下位置获取查找信息
  • rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi- 是的,我们在查找键下的RMI注册表中获取有关JMX RMI服务器的信息jmxrmi

这有点本末倒置,因为必须首先联系SLP URL的后半部分给出的RMI注册表

挠挠头之后,直观地说,让我们试试:

service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

是的,这有效!JMX RMI 服务器端口是从注册表中很好地获得的。经过再三考虑,目标计算机也应该从注册表中获取,因此:

service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi

更好的是,这也有效!

引用:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

答案 2

解释一下:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
  1. service:jmx:rmi://192.168.30.10:1234- 表示计算机上有一个 IP 地址为 192.168.30.10 的 JMX 代理。JMX 代理使用 (TCP) 端口 1234 通过 RMI(基本上充当 RMI 服务器)提供 JMX 服务。
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi- 表示可以通过 RMI 与 JMX 代理交互的 RMI 存根在 RMI 注册表中找到,该注册表在 IP 地址为 192.168.30.10 的计算机上运行,并且正在使用 (TCP) 端口 2344。要获取 RMI 存根,您需要查找“jmxrmi”绑定。

前面的答案表明,URL的第二部分是获取JMX RMI服务器的服务器端口。这是不正确的。JMX RMI 服务器端口是 (TCP) 1234,是 URL 的一部分。从 RMI 注册表获得的是 RMI 存根 (),您可以使用它通过 RMI 与 JMX 代理(MBean 服务器)进行通信。javax.management.remote.rmi.RMIServerImpl_Stub

希望这有帮助。


推荐