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

离线时无法建立与本地主机的连接

VB.Net 应用程序无法连接到本地 MySQL,但我可以从命令连接

查尔斯调试代理未连接到本地主机

无法连接到 ejabberd 本地主机

MPICH2 在本地运行提示无法连接到主机