在工作中,我们有两台装有 Windows XP 和 JDK 1.6.0_07 的 PC(目前无法更新 Java),都有两个网络接口 (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 获得附件。
- 我只是不明白在这种情况下 JConsole 不会附加到 IB 上是怎么可能的。AFAIK,如果我们没有定义 java.rmi.server.hostname,JMX 使用 0.0.0.0 并监听两个 NIC。如果这与网络本身有关,请提供建议以向 IT 部门询问什么。
- 我们的实际应用程序有一个解决方法:在第一台 PC 上,它启动 2 个单独的进程,每个进程仅在一个 NIC 上具有 JMX,第三个进程将来自客户端的数据与第三个 JMX 合并。这三个进程分别从 .bat 文件启动。我真的很想改变这一点,在两个 NIC 上都有一个带有一个 JMX 的进程;或者至少,如果可能的话,用两个 JMX 启动一个进程,每个 NIC 一个。是吗?
非常感谢。