我使用以下代码启动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解释原因)
答案 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
,它仍然可以监听所有网络接口。
顺便说一句,我尝试了这个改变的代码,但是现在我得到了另一个例外(不同的例外)。