首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程JMX调用上的NoRouteToHostException / NoSuchHostException

远程JMX调用上的NoRouteToHostException / NoSuchHostException
EN

Stack Overflow用户
提问于 2012-05-31 19:16:12
回答 2查看 5.8K关注 0票数 7

我在CentOS5.6服务器上远程调用JBoss 6时遇到了问题。我以前在Debian服务器上运行相同的应用程序时也能做到这一点。

代码语言:javascript
复制
./twiddle.sh --server=service:jmx:rmi:///jndi/rmi://SERVER:1090/jmxconnector invoke foo:service=bar baz

Caused by: java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:189)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)

如果我在服务器上本地运行,同样的调用也会成功。我已经用iptables打开了端口1090,我可以通过telnet连接到服务器:1090。hostname -i返回正确的IP地址。

我也尝试过用-Djava.rmi.server.hostname=localhost启动JBoss。如果我这样做,我会得到一个不同的异常:

代码语言:javascript
复制
Caused by: java.rmi.NoSuchObjectException: no such object in table
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
    at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
    at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327)
    at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:279)
    at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
    at org.jboss.console.twiddle.Twiddle.createMBeanServerConnection(Twiddle.java:322)
    at org.jboss.console.twiddle.Twiddle.connect(Twiddle.java:331)
    at org.jboss.console.twiddle.Twiddle.access$400(Twiddle.java:60)
    at org.jboss.console.twiddle.Twiddle$1.getServer(Twiddle.java:217)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-08 22:06:20

事实证明,除了端口1090之外,JMX/RMI还使用动态分配的端口,该端口会被防火墙阻止。因此,如果合适的话,完全禁用防火墙,否则这似乎是另一种选择(我还没有尝试过):

http://olegz.wordpress.com/2009/03/23/jmx-connectivity-through-the-firewall/

票数 5
EN

Stack Overflow用户

发布于 2013-10-11 05:49:51

我做的是这样的:

更新文件activemq.xml并指定rmiServerPort。

代码语言:javascript
复制
<managementContext createConnector="true" connectorPort="SOME_PORT" rmiServerPort="SOME_OTHER" jmxDomainName="org.apache.activemq"/>

通过更新iptables条目来允许这两个端口,重新启动activemq,它应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10832528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档