The following code lists all mbeans of a given (jmx enabled) java application with their attributes and operations grouped by the domain. Just start the java app you wanna monitor with a fixed jmx port, e.g. by using these vm parameters:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Then run this main:
import javax.management.*; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import java.io.IOException; public class JmxListAll { public static void main(String[] args) throws IOException, MalformedObjectNameException, IntrospectionException, InstanceNotFoundException, ReflectionException { /* 1. JMXServiceURL. */ String jmxHost = "localhost:9000"; // exactly like jconsole localhost:9026 String url = "service:jmx:rmi:///jndi/rmi://" + jmxHost + "/jmxrmi"; JMXServiceURL serviceURL = new JMXServiceURL(url); /* 2. JMXConnector and the actual serverConnection */ JMXConnector connector = JMXConnectorFactory.connect(serviceURL); MBeanServerConnection serverConnection = connector.getMBeanServerConnection(); /* 3. Walk through the domains and their objects */ System.out.println("\n Now we have a look at " + serverConnection.getMBeanCount() + " mbeans!"); int objectCount = 0; for (String domain : serverConnection.getDomains()) { System.out.println("\n***********************************************************************************"); System.out.println("DOMAIN: " + domain); // query all the beans for this domain using a wildcard filter for (ObjectName objectName : serverConnection.queryNames(new ObjectName(domain + ":*"), null)) { System.out.println(" objectName " + ++objectCount + ": " + objectName); MBeanInfo info = serverConnection.getMBeanInfo(objectName); for (MBeanAttributeInfo attr : info.getAttributes()) { System.out.print(" attr: " + attr.getDescription()); try { String val = serverConnection.getAttribute(objectName, attr.getName()).toString(); System.out.println(" -> " + abbreviate(val)); } catch (Exception e) { System.out.println(" FAILED: " + e); } } for (MBeanOperationInfo op : info.getOperations()) { System.out.println(" op: " + op.getName()); } } } } static String abbreviate(String text) { if (text != null && text.length() > 42) { return text.substring(0, 42) + "..."; } else { return text; } } }
As you should see, in the java.lang domain are several memory related mbeans. Pick the one you need.