如何为多个JVM使用单个JMX代理?

时间:2011-07-26 14:56:53

标签: java jmx snmp

在单台计算机上运行多个JVM(单个IP地址)时,在每个JVM中合并JMX需要一个单独的端口。由于我不会在这种环境中进入配置端口的原因,所以我希望在每台机器上都有一个JMX代理,它能够提供对每个本地JVM及其JMX数据的访问。这类似于本地SNMP守护程序,其中代理程序在每个单独的进程中运行。

短暂的端口很好,但是,因为它们超出了我有权明确配置JMX的有争议的端口范围。

我知道像Oracle Coherence这样的产品在内部执行此操作,但是有没有通用的解决方案呢?

1 个答案:

答案 0 :(得分:4)

OpenDMK支持MBeanServer Cascading,这在逻辑上是您想要实现的,它在一个MBeanServer的外观下暴露多个MBeanServers。问题是,即使对于同一主机上的JVM,也没有“端口自由”形式的JVM间JMX远程处理,因此每个JVM仍然需要绑定到至少1个端口,即使它只在localhost上访问。 (使用JMXMP是最小化端口使用的最佳选择,因为它是单插槽解决方案而不是RMI,这是非确定性的)。如果你可以忍受这个,那么Cascading实际上工作得非常好,协议是在标准的当代JMX远程规范中实现的。

我认为允许比主机上的实际端口更多JVM / JMX服务器的唯一方法是开发“无TCP”JMX连接器服务提供程序或多播。