11

我希望能够记录通过 jconsole 访问的所有 JMX 数据。有没有办法以编程方式做到这一点?我正在构建一种系统日志记录形式,并且我想使用类似于 jconsole 的一些工具创建可查看的间隔数据。

我该怎么做呢?

4

2 回答 2

20

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

ig

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() );
}

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

于 2010-02-25T17:40:26.273 回答
5

当我想做同样的事情时,我使用这个命令行 JMX 客户端作为起点。

于 2010-02-25T21:34:33.113 回答