【问题标题】:jmx can't connect to localhostjmx 无法连接到本地主机
【发布时间】: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 连接。结果是一样的。

【问题讨论】:

  • 能否分享您的本地主机连接源代码

标签: jakarta-ee tomcat jmx


【解决方案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 你好,你觉得stackoverflow.com/q/59471539/1410223
猜你喜欢
  • 2014-11-06
  • 1970-01-01
  • 2016-01-01
  • 2021-06-20
  • 2015-07-26
  • 2015-11-04
  • 2016-04-25
  • 2015-12-25
相关资源
最近更新 更多