在0.0.0.0上启动自定义JMX服务器时出错

时间:2011-02-15 22:22:56

标签: java linux networking rmi jmx

我使用以下代码启动JMX服务器:

Integer port = 8291;
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://0.0.0.0:"+ (port+100) +"/jndi/rmi://0.0.0.0:"+ port +"/jmxrmi");

在我们的应用程序启动中,我们得到:

Caused by: java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
        java.net.ConnectException: Connection refused
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
        at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322)
        at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
        at com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:120)
        ... 53 more
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:193)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:525)
        at java.net.Socket.connect(Socket.java:475)
        at java.net.Socket.<init>(Socket.java:372)
        at java.net.Socket.<init>(Socket.java:186)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterS

这适用于Windows但在Linux上失败。 8291没有任何约束。(我用netstat -anp

验证了这一点

有人知道为什么会失败吗?

FYI。由于防火墙,我们正在启动自定义JMX服务器(请参阅here解释原因)

1 个答案:

答案 0 :(得分:1)

找到a note which might help you

  

使用Sun的JMX Remote JMX RI,   未使用hostname / ip-addr段   限制目标IP地址/名称,   正如它应该。它必须匹配任何   该主机的有效IP地址/名称   (包括localhost或127.0.0.1),   然后它将收听IPADDR_ANY。   你将不得不做自定义编码(或   使用IP过滤或防火墙   产品)限制听   地址。

所以看起来你可以用0.0.0.0替换localhost,它仍然可以监听所有网络接口。

顺便说一句,我尝试了这个改变的代码,但是现在我得到了另一个例外(不同的例外)。