我希望能够记录可通过jconsole访问的所有JMX数据。有没有办法以编程方式执行此操作?我正在构建一种系统日志记录形式,并且我想使用类似于jconsole的某些工具来创建可查看的间隔数据。
我将如何去做呢?
最佳答案
java.lang.management.ManagementFactory使您可以访问JMX数据。
例如
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
对于完整的实现连接到远程虚拟机:
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() );
}
从信息中,您可以根据需要查询对象名称和属性。
关于java - 如何以编程方式转储JMX数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2336012/