2014-04-22 343 views
0

嘗試連接簡單的JMX監視。託管應用程序和監視工具位於同一臺服務器上。當試圖連接錯誤jmx無法連接到本地主機

00:30:55610 FATAL 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 .masSiteListener.makeJmxConnection(SiteListener.java:93)at com.masSiteListener.getMBeanConnect(SiteListener.java:73)at com.masSiteListener.contextInitialized(SiteListener.java:51)at org.apache.catalina。 core.StandardContext.listenerStart(StandardContext.java:3972) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467) at org.apache.catalina.core.StandardContext.r電子負載(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) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav一: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) at java.lang.Thread.run(Unknown Source)引起者: javax.naming.ServiceUnavailableException [根異常是 java.rmi.ConnectException:連接拒絕主機:localhost; 嵌套異常是:java.net.ConnectException:連接被拒絕] at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source) at com.sun.jndi.toolkit.url.GenericURLContext.lookup(Unknown源代碼) at javax.naming.InitialContext.lookup(Unknown Source)at javax.management.remote.rmi.RMIConnector。findRMIServerJNDI(Unknown Source)at javax.management.remote.rmi.RMIConnector.findRMIServer(Unknown Source) ... 26更多原因:java.rmi.ConnectException:連接被拒絕 to host:localhost;嵌套的異常是:java.net.ConnectException: 連接被拒絕在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(未知源)在 sun.rmi.transport.tcp.TCPChannel.createConnection(未知源)在 太陽.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)at sun.rmi.server.UnicastRef.newCall(Unknown Source)at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)... 31更多 由於:java.net.ConnectException:連接被拒絕 java.net.PlainSocketImpl.socketConnect(本地方法) java.net.AbstractPlainSocketImpl.doConnect(未知源) java.net.AbstractPlainSocketImpl.connectToAddress(未知源)在 jav (未知來源) java.net.SocksSocketImpl.connect(未知來源) java.net.Socket.connect(來源不明) java.net.Socket.connect(未知來源)在 java.net.Socket中。(未知來源)在 java.net.Socket中。(未知來源)處 sun.rmi.transport sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(未知 源)。 proxy.RMIMasterSocketFactory.createSocket(未知 源)... 36多個

在服務器上,開放訪問,以便

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連接。結果是一樣的。

+0

勞駕您分享本地主機連接源代碼 –

回答

0

我沒有看到你設置你的認沽number.where是你這短的代碼

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 

我希望它幫助你得到的想法

+0

不太明白。 第一臺服務器從第一個列表開始。然後它從第二個列表開始監視工具。 在這一點,並在另一種情況下,該變量的JMXServiceURL網址最終到達網址 –