2010-02-25 30 views
11

Ich möchte alle JMX-Daten protokollieren können, die über jconsole zugänglich sind. Gibt es eine Möglichkeit, dies programmatisch zu tun? Ich baue eine Form der Protokollierung des Systems auf und möchte intervalierte Daten erstellen, die mit einem ähnlichen Tool wie jconsole angezeigt werden können.Wie programmiere ich JMX-Daten programmgesteuert?

Wie würde ich das machen?

Antwort

20

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.

+0

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? –

+0

Okay, ich kann alle ObjectNames mit queryMBeans abrufen, aber ich kann immer noch nicht alle Attribute automatisch abrufen. –

+0

: 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. –

5

Ich habe diese command line JMX client als Ausgangspunkt, wenn ich das gleiche tun wollte.

+0

Es sieht so aus, als ob ich wirklich 10.4 für den "Attributes" -Befehl will, aber der Link auf der Seite ist kaputt. Irgendwelche Ideen, wo ich einen Spiegel finden könnte? –

+0

Ich denke, das ist die Version, die ich habe. Sie können es hier bekommen: http://drop.io/jmxclient – Mark

Verwandte Themen