java.lang.management.ManagementFactory gibt Ihnen Zugriff auf JMX-Daten.
i.g.
List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean mpb : memPoolBeans) {
System.out.println("Memory Pool: " + mpb.getName());
}
Einige Proben sind bei SO Abfrage zur Verfügung: [java] + managementfactory
Ein gutes Buch: https://www.ibm.com/developerworks/library/j-jtp09196/index.html
Für die vollständige Umsetzung zu einem Remote-VM verbindet:
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());
}
Aus Mit der Info können Sie Objektnamen und Attribute nach Wunsch abfragen.
Das funktioniert, aber gibt es eine einfache Möglichkeit, alle Werte aus allen Objektnamen zu erhalten? Im Moment scheint es, als müsste ich auf MBeanServerConnection zugreifen und dann jeden Wert einzeln mit mbs.getAttributes (..) abfragen. Gibt es einen besseren Weg? –
Okay, ich kann alle ObjectNames mit queryMBeans abrufen, aber ich kann immer noch nicht alle Attribute automatisch abrufen. –
: P. Jetzt kann ich alle Attribute abfragen, aber die Art, wie Sie es tun, ist außerordentlich umständlich. Ich werde deine Antwort bearbeiten und sie ein wenig vollständiger machen, dann akzeptiere sie. –