java - JMX 和两个网络接口(interface)

标签 java network-programming jmx nic multihomed

在工作中,我们有两台装有 Windows XP 和 JDK 1.6.0_07(目前无法更新 Java)的 PC,它们都有两个网络接口(interface) (NIC),第一个具有 190.1.XXX.XXX 形式的 IP (我们称之为 IA),第二个有 190.2.XXX.XXX (IB)。 “ipconfig/all”为两个 NIC 带来主机名 HOSTNAME,“nbtstat/a IA”和“nbtstat/a IB”也是如此。从 IB 到 IA 不存在 ping(我想,从 IA 到 IB 不存在,尽管没有检查)。为了稳健性,我们应该确保我们的实际应用程序在两个 NIC 上都使用 JMX。问题就在这里开始了。可以观察到以下相同的行为:

java -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar <JDK_HOME>/demo/jfc/Java2D/Java2Demo.jar

在第二台 PC 上使用 JConsole 并使用以下之一附加到远程进程:IA:9000 或 IB:9000 或 HOSTNAME:9000。他们都工作。但是,如果我在第一台 PC(运行 Java2Demo 的地方)上禁用 IA,则根本不可能有附件(既不是通过 IB,也不是通过 HOSTNAME)。 IB 的 Ping 有效,mstsc 也是如此(因此有 IB 的连接)。但是,如果我禁用 IB,我将同时通过 IA 和 HOSTNAME 获取附件。

  1. 我只是不明白在这种情况下 JConsole 不会附加到 IB 上怎么可能。据我所知,如果我们不定义 java.rmi.server.hostname,JMX 使用 0.0.0.0 并监听两个 NIC。如果是网络本身的问题,还请IT部门指点一下。
  2. 我们的实际应用程序有一个解决方法:在第一台 PC 上它启动 2 个独立的进程,每个进程只在一个 NIC 上有 JMX,第三个进程将来自客户端的数据与第三个 JMX 合并。这三个进程分别从.bat 文件启动。我真的很想改变这一点,在两个 NIC 上使用一个 JMX 进程;或者至少,如果可能的话,用两个 JMX 启动一个进程,每个 NIC 一个。是吗?

非常感谢。

最佳答案

您可以使用 JMXConnectorServerFactory 在同一个 jvm 上启动多个 JMXConnectorServer(网上有很多示例/教程)。您可以公开平台 MBeanServer 或您自己的自定义 MBeanServer。

关于java - JMX 和两个网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865281/

相关文章:

java - 如何将客户端环境传递给 MBean 方法调用

java - 即使运行突然终止,我们如何才能在 TestNG 中获得成功运行测试的结果?

java - 分数百分比的正则表达式

java - 为什么 Java 8 ZonedDateTime 认为 24​​ :01 is a valid time string representation?

C++/CLI (.NET) 相当于 native C++ 将结构写入网络

c++ - 在网络上传输数据

linux - 是否可以从 linux 的用户空间执行 net_enable_timestamp()?

java - Json 作为 Grails Controller 的参数

java - 在已运行的进程上启用 JMX