java.lang.management.ManagementFactory daje dostęp do danych JMX.
i.g.
List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean mpb : memPoolBeans) {
System.out.println("Memory Pool: " + mpb.getName());
}
Niektóre próbki są dostępne na SO zapytania: [Java] + managementfactory
warto przeczytać: https://www.ibm.com/developerworks/library/j-jtp09196/index.html
Dla pełnej realizacji podłączenia do zdalnego 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());
}
Od informacje, możesz zapytać o nazwy obiektów i atrybuty według potrzeb.
To działa, ale czy istnieje prosty sposób na uzyskanie wszystkich wartości ze wszystkich nazw obiektów? Teraz wydaje mi się, że muszę pobrać na MBeanServerConnection, a następnie przesyłać każdą wartość osobno za pomocą mbs.getAttributes (..). Czy istnieje lepszy sposób? –
OK, mogę pobrać wszystkie ObjectNames za pomocą zapytaniaMBeans, ale nadal nie mogę automatycznie uzyskać wszystkich atrybutów. –
: P. Teraz mogę sprawdzać wszystkie atrybuty, ale sposób w jaki to robisz jest wyjątkowo okrężny. Zmienię twoją odpowiedź i sprawię, że będzie bardziej kompletna, a potem ją zaakceptuj. –