我将重用我先前为这个问题写的答案:无法通过Java6中的jconsole连接到Tomcat的MBeanServer
它不完整,但可能会有所帮助:
假设您具有在“ TARGET MACHINE”上运行的JMX服务器(别名为“ JMX Agent”别名“您要连接的JVM”),其 RMI注册表端口
位于“ RMI REGISTRY PORT”,而 JMX RMI服务器端口 位于“ JMX RMI”服务器端口’。
注意:
- 在 RMI注册表 告诉JMX客户端在哪里可以找到 JMX RMI服务器端口 ; 可以在key下获取信息
jmxrmi
。 - 在 RMI注册表端口 通常是已知的,因为它是通过在JVM启动系统属性中设置。
- 在 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
- 服务类型 包括: 抽象类型jmx
和 URL方案rmi
- 其余 -SAP (服务访问协议规范)
汁液 分解为:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
-ipsite/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
-URL部分
消息灵通的JMX客户端连接到“ ipsite”以进行RMX上的JMX交换。但是不知道该端口的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
更好的是,它也有效!
参考文献:
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
- http://mx4j.sourceforge.net/docs/ch03s04.html
- http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
- http://www.rfc-editor.org/rfc/rfc2609.txt



