如何以编程方式转储JMX数据?

时间:2010-02-25 17:14:48

标签: java logging jmx jconsole

我希望能够通过jconsole记录所有可访问的JMX数据。有没有办法以编程方式执行此操作?我正在构建一种系统日志记录,我想用一些类似于jconsole的工具创建可查看的交互数据。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:20)

java.lang.management.ManagementFactory可让您访问JMX数据。

i.g。

List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean mpb : memPoolBeans) {
    System.out.println("Memory Pool: " + mpb.getName());
}

SO查询提供了一些示例:[java] + managementfactory

好读:https://www.ibm.com/developerworks/library/j-jtp09196/index.html

连接到远程VM的完整实现:​​

Map<String,String[]> env = new HashMap<String, String[]>();
env.put( JMXConnector.CREDENTIALS, new String[]{"user","pass"} );
JMXServiceURL address = new JMXServiceURL("service:rmi:///jndi/rmi://host:port/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(address,env);
MBeanServerConnection mbs = connector.getMBeanServerConnection();

//get all mbeans
Set<ObjectInstance> beans = mbs.queryMBeans(null,null);

for( ObjectInstance instance : beans )
{
    MBeanInfo info = mbs.getMBeanInfo( instance.getObjectName() );
}

根据信息,您可以根据需要查询对象名称和属性。

答案 1 :(得分:5)

当我想做同样的事情时,我用这个command line JMX client作为起点。