如何为多个JVM拥有一个单一的JMX代理?

7
当在一台机器上运行多个JVM(也是单个IP地址),每个JVM都需要一个单独的端口来集成JMX。由于配置的端口在此环境中很受限制,我不会深入讨论原因,因此我想在每台机器上有一个单独的JMX代理,能够提供对本地JVM及其JMX数据的访问,类似于每个单独进程中运行的代理的本地SNMP守护程序。
临时端口很好,因为它们处于我可以用来明确配置JMX的竞争端口范围之外。
我知道像Oracle Coherence这样的产品内部执行此操作,但是否有通用解决方案可以执行此操作?
1个回答

4
OpenDMK 支持 MBeanServer 级联,逻辑上你需要的就是这个,即在一个 MBeanServer 的外观下公开多个 MBeanServers。问题在于,即使对于同一主机上的 JVM,也没有无需端口的跨 JVM JMX 远程管理接口的形式,因此每个 JVM 都需要绑定至少 1 个端口,即使只在本地访问。(使用 JMXMP 是最小化端口使用的最佳选择,因为它是一个单一套接字解决方案,而 RMI 则是非确定性的)。如果您可以接受这一点,那么级联实际上运行得非常好,而且该协议已经在标准的当代 JMX 远程管理规范中实现了。

我所能想到的唯一允许更多 JVM/JMX 服务器数量超过主机实际端口的方法是开发“无 TCP”JMX连接器服务提供程序或组播。


是的,这正是我正在寻找的。实际上,我刚刚独立地找到了这个链接:http://weblogs.java.net/blog/emcmanus/archive/2007/08/combining_casca.html,它似乎运行良好。因为它使用的是临时端口而不是配置端口,所以对我来说非常适用。 - Scott A
1
很棒。您还可以使用Attach API查找JVM,在找到的每个JVM中激活并连接到管理代理(JMX服务器)。这两个API非常适合您想要做的事情。注意:如果“搜索器”没有操作系统特权来向另一个JVM发送信号,则Attach API将无法工作。 - Nicholas
是的,attach API非常适合这个需求。同时,它只能在Sun JVM上运行。 - Scott A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接