2009-08-13 172 views
8

我正在使用JBoss运行客户端/服务器应用程序。访问远程MBean服务器

如何连接到服务器JVM的MBeanServer?我想使用MemoryMX MBean来跟踪内存消耗。

我可以使用JNDI查找连接到JBoss MBeanServer,但java.lang.MemoryMX MBean未注册到JBoss MBeanServer。

编辑:需求是编程访问从客户端的内存使用情况。

回答

1

您是否尝试启动JConsole(即$JAVA_HOME/bin)与服务器连接?您应该能够从那里

+0

没错,就是工作。但我想从我的客户端应用程序进行编程访问。我的客户端可以连接到JBoss MBean服务器,但我不知道如何连接到平台MBean服务器。 – parkr 2009-08-13 07:00:07

+0

道歉 - 从您的问题中不清楚,程序访问是一项要求 – 2009-08-13 07:26:44

+1

我的歉意:) – parkr 2009-08-13 07:47:58

4

一个代码示例查看内存统计从IBM文章:link

MBeanServerConnection serverConn; 

try { 
    //connect to a remote VM using JMX RMI 
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<addr>"); 

    JMXConnector jmxConnector = JMXConnectorFactory.connect(url); 

    serverConn = jmxConnector.getMBeanServerConnection(); 

    ObjectName objName = new 
    ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 

    // Get standard attribute "VmVendor" 
    String vendor = 
    (String) serverConn.getAttribute(objName, "VmVendor"); 

} catch (...) { } 
15

我写了一个类是这样的:

import javax.management.remote.JMXServiceURL; 
import javax.management.MBeanAttributeInfo; 
import javax.management.MBeanInfo; 
import javax.management.MBeanServerConnection; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 

public class JVMRuntimeClient 
{ 
    static void main(String[] args) throws Exception 
    { 
     if (args == null) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 
    if(args.length < 2) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 

    try 
    { 
     JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi"); 
     JMXConnector connector = JMXConnectorFactory.connect(target); 
     MBeanServerConnection remote = connector.getMBeanServerConnection(); 

     /** 
     * this is the part where you MUST know which MBean to get 
     * com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics 
     * YOURS WILL VARY! 
     */ 
     ObjectName bean = new ObjectName("com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics"); 

     MBeanInfo info = remote.getMBeanInfo(bean); 
     MBeanAttributeInfo[] attributes = info.getAttributes(); 
     for (MBeanAttributeInfo attr : attributes) 
     { 
      System.out.println(attr.getDescription() + " " + remote.getAttribute(bean,attr.getName())); 
     } 
     connector.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e.getMessage()); 
     System.exit(0); 
    } 
    } 
} 
+0

只需要解决JMX服务URL *我的问题 - 谢谢! – 2013-03-22 17:10:55