解释JMX URL

pri*_*ank 71 java jmx

我想了解一个JMX服务URL.

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Dav*_*fer 100

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

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

假设你有'TARGET MACHINE'运行的JMX服务器(别名'JMX代理'别名'你要连接的JVM'),RMI注册表端口位于'RMI REGISTRY PORT',JMX RMI服务器端口位于'JMX RMI'服务器端口'.

注意:

  1. RMI注册表告诉JMX客户端在哪里可以找到JMX RMI服务器端口 ; 信息可以在关键下获得jmxrmi.
  2. 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- 服务类型包括:抽象类型 jmxURL方案 rmi
  • 其余的 - 闷棍(服务访问协议规范)

sap被分解为:

  • //<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT> - ipsite
  • /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


小智 6

解释:

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi
Run Code Online (Sandbox Code Playgroud)
  1. service:jmx:rmi://192.168.30.10:1234 - 说机器上有一个JMX代理,IP地址为192.168.30.10.JMX代理使用(TCP)端口1234通过RMI提供JMX服务(基本上充当RMI服务器).
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi - 说,RMI存根与JMX代理通过RMI交互可以在其中与IP地址192.168.30.10的机器上运行的RMI注册表中找到并使用(TCP)端口2344要获得RMI存根需要查找"jmxrmi"绑定.

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

希望这可以帮助.


sta*_*ker 5

根据javax.management.remote.rmi

这个网址是这样组装的

service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
Run Code Online (Sandbox Code Playgroud)

  • 我认为他是在问为什么事情需要如此复杂。 (5认同)