jmx 无法连接到本地主机
Posted
技术标签:
【中文标题】jmx 无法连接到本地主机【英文标题】:jmx can't connect to localhost 【发布时间】:2014-04-22 03:45:22 【问题描述】:尝试连接一个简单的JMX监控。托管应用程序和监控工具位于同一台服务器上。尝试连接时出错
00:30:55,610 致命 http-8080-6 SiteListener:makeJmxConnection:99 - java.io.IOException:无法检索 RMIServer 存根: javax.naming.ServiceUnavailableException [根异常是 java.rmi.ConnectException:连接拒绝主机:localhost; 嵌套异常是:java.net.ConnectException:连接被拒绝] 在 javax.management.remote.rmi.RMIConnector.connect(未知来源) 在 javax.management.remote.JMXConnectorFactory.connect(未知 来源)在 com.m.a.s.SiteListener.makeJmxConnection(SiteListener.java:93) 在 com.m.a.s.SiteListener.getMBeanConnect(SiteListener.java:73) 在 com.m.a.s.SiteListener.contextInitialized(SiteListener.java:51) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972) 在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) 在 org.apache.catalina.core.StandardContext.reload(StandardContext.java:3228) 在 org.apache.catalina.manager.ManagerServlet.reload(ManagerServlet.java:918) 在 org.apache.catalina.manager.htmlManagerServlet.reload(HTMLManagerServlet.java:545) 在 org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:121) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:558) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Unknown Source) 引起: javax.naming.ServiceUnavailableException [根异常是 java.rmi.ConnectException:连接拒绝主机:localhost; 嵌套异常是:java.net.ConnectException:连接被拒绝] 在 com.sun.jndi.rmi.registry.RegistryContext.lookup(未知来源) 在 com.sun.jndi.toolkit.url.GenericURLContext.lookup(未知来源) 在 javax.naming.InitialContext.lookup(Unknown Source) 在 javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(未知 来源)在 javax.management.remote.rmi.RMIConnector.findRMIServer(未知来源) ... 26 更多原因:java.rmi.ConnectException:连接被拒绝 主机:本地主机;嵌套异常是:java.net.ConnectException: 连接被拒绝 sun.rmi.transport.tcp.TCPEndpoint.newSocket(未知来源)在 sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.newCall(未知来源)在 sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) ... 31 更多 引起:java.net.ConnectException:连接被拒绝 java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(未知来源)在 java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) 在 java.net.Socket.connect(Unknown Source) 在 java.net.Socket.connect(Unknown Source) 在 java.net.Socket.(未知来源)在 java.net.Socket.(未知来源)在 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(未知 来源)在 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(未知 来源)... 36 更多
在服务器上,打开访问so
private static void startJmxServer() throws MalformedURLException, IOException
Map<String, Object> props = new HashMap<String, Object>();
RemouteAuthentificator auth = new RemouteAuthentificator();
props.put("jmx.remote.authenticator", auth);
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:22414/MServer");
MBeanServer mbeanSrv = ManagementFactory.getPlatformMBeanServer();
JMXConnectorServer server = JMXConnectorServerFactory.newJMXConnectorServer(url, props, mbeanSrv);
server.start();
log.info("JMX RMI Agent has been bound on address: " + url);
在Tomcat下的一个管理工具中,尝试连接
static private MBeanServerConnection makeJmxConnection(String objectName)
// objectName = “MServer:name=Settings”;
MBeanServerConnection mConnect = null;
try
String[] credentials = new String[] "server", "password";
Map<String, String[]> props = new HashMap<String, String[]>();
props.put("jmx.remote.credentials", credentials);
JMXServiceURL url = new JMXServiceURL(“service:jmx:rmi:///jndi/rmi://localhost:22414/MServer”);
jmxc = JMXConnectorFactory.connect(url, props);
mConnect = jmxc.getMBeanServerConnection();
mbeanName = new ObjectName(objectName);
catch(Exception e)
log.fatal("", e);
return mConnect;
并尝试通过外部 ip 连接。结果是一样的。
【问题讨论】:
能否分享您的本地主机连接源代码 【参考方案1】:我没看到你在哪里设置了你的 put number。你在哪里这么短的代码
String host = "localhost"; // or some x.y.z
int port = setyourPortNumber;
String url = "service:jmx:rmi:///jndi/rmi://localhost:22414/MServer"; // where you get services
希望对你有所帮助
【讨论】:
不太明白。第一个服务器从第一个列表开始。然后它从第二个清单开始监控工具。在这种情况下和另一种情况下的最终 url,变量 JMXServiceURL url @ferrakkem-bhuiyan 你好,你觉得***.com/q/59471539/1410223以上是关于jmx 无法连接到本地主机的主要内容,如果未能解决你的问题,请参考以下文章
出于开发目的,无法从本地主机连接到 AWS RDS Postgresql