【问题标题】:Can't connect to remote JMX running on localhost [duplicate]无法连接到在本地主机上运行的远程 JMX [重复]
【发布时间】:2022-01-30 03:40:04
【问题描述】:

我在一个 pod 中运行了两个 Kubernetes 容器,分别称为容器 A 和 B。A 运行了一个 JMX 服务器。用于运行服务器的 Java 选项是:

-Dcom.sun.management.jmxremote=true  
-Dcom.sun.management.jmxremote.host=127.0.0.1  
-Dcom.sun.management.jmxremote.port=1234  
-Dcom.sun.management.jmxremote.ssl=false  
-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.host=localhost 标志是专门设置的,因此 JMX 服务器不会暴露给外部客户端。
容器 B 想通过 localhost only 使用 JMX 监控 A。使用以下代码建立与 A 中 JMX 服务器的连接:

String serverUrl = "service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi";
JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceUrl, null);
MBeanServerConnection mBeanConn = jmxConnector.getMBeanServerConnection();

我希望代码能够毫无问题地运行,因为我能够使用 telnet 从 B 连接到 A 的 JMX 端口。但是,当Java代码运行时,会抛出一个异常,前几行是:

java.rmi.ConnectException: Connection refused to host: 10.8.0.88; nested exception is: 
    java.net.ConnectException: Connection refused (Connection refused)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:623) ~[na:1.8.0_312]
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) ~[na:1.8.0_312]
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) ~[na:1.8.0_312]
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:132) ~[na:1.8.0_312]

客户端使用私有 IP 连接到 RMI 服务器,而不是使用 127.0.0.1 连接,并且由于 JMX 服务器仅在 localhost 上侦听而失败。我需要帮助找出允许容器 A 和 B 之间通过 localhost 进行通信的最佳方式。

【问题讨论】:

标签: java jmx


【解决方案1】:

为遇到同样问题的其他人回答我自己的问题。在 Java 选项中添加选项 -Djava.rmi.server.hostname=127.0.0.1 即可解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 2019-02-23
    • 2016-06-29
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多