在单台机器上运行多个JVM(单个IP地址)时,在每个JVM中集成JMX需要一个单独的端口.由于我不会在这种环境中进入配置端口的原因,所以我希望在每台机器上都有一个JMX代理,它能够提供对每个本地JVM及其JMX数据的访问.这类似于本地SNMP守护程序,其中代理程序在每个单独的进程中运行.
然而,短暂的端口很好,因为它们超出了我有权访问的有争议的端口范围,用于显式配置JMX.
我知道像Oracle Coherence这样的产品在内部执行此操作,但是有没有通用的解决方案呢?
OpenDMK支持MBeanServer Cascading,这在逻辑上是您想要实现的,即在一个 MBeanServer 的外观下公开多个 MBeanServer 。问题在于,即使对于同一主机上的 JVM,也没有“无端口”形式的 JVM 间 JMX 远程处理,因此每个 JVM 仍需要绑定到至少 1 个端口,即使它仅在本地主机上访问。 .(使用 JMXMP 是最小化端口使用的最佳选择,因为它是单套接字解决方案,而不是 RMI,后者是......非确定性的)。如果您可以接受这一点,那么 Cascading 实际上可以很好地工作,并且该协议是在标准的当代 JMX 远程处理规范中实现的。
我能想到的允许比主机上实际端口更多的 JVM/JMX 服务器的唯一其他方法是开发“无 TCP”JMX 连接器服务提供程序或多播。