Я хочу быть в состоянии регистрировать все данные JMX, доступные через jconsole. Существует ли способ сделать это программно? Я создаю форму из журналирования системы, и я хочу создать intervaled данные, просматриваемые с некоторым инструментом, подобным 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() );
}
Из информации вы можете запросить имена и атрибуты объектов по желанию.
Я использовал этот клиент JMX командной строки в качестве отправной точки, когда я хотел сделать то же самое.