¿Cómo accedo al uso de memoria mediante progtwigción mediante JMX?

Estoy buscando un código Java JMX de muestra para acceder a los valores de los atributos JMX de otra máquina virtual.

Con JConsole, no tengo problemas para mirar java.lang / Memory / Attributes / HeapMemory

¿Cómo obtendría la misma información de un progtwig Java que se ejecuta en una VM?

Ejemplos de cualquier opción de línea de comando necesaria, u otras cosas que deben comenzarse son apreciadas.

Necesita configurar un JMXConnector. Aquí hay un fragmento de código que obtendrá el uso de la memoria de stack comprometida en una máquina remota.

String host ="myHost"; int port = 1234; HashMap map = new HashMap(); String[] credentials = new String[2]; credentials[0] = user; credentials[1] = password; map.put("jmx.remote.credentials", credentials); JMXConnector c = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map); c.connect(); Object o = c.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage"); CompositeData cd = (CompositeData) o; System.out.println(cd.get("committed")); private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException { return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi"); } 

Si no le importa la seguridad, puede establecer el mapa como nulo. Necesita iniciar el servidor remoto con;

 -Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 

Es posible que desee echar un vistazo a wlshell, que es una pequeña utilidad que le permite acceder a MBeans en un servidor remoto utilizando una interfaz de texto o un script. Se puede usar con WebLogic, pero funciona para cualquier progtwig Java donde haya habilitado monitoreo remoto.

La respuesta de @Kire se ve bien, pero pensé en agregar algunos detalles sobre mi paquete SimpleJMX . Contiene soporte de servidor que le permite exportar beans fácilmente y también incluye una interfaz de cliente simple que funciona en contra de cualquier JVM que exporta información JMX.

Para acceder al uso de la memoria harías algo como:

 JmxClient client = new JmxClient("some.host.name", somePortNumber); // get the memory composite information CompositeData composite = (CompositeData)client.getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage"); System.out.println(composite.get("committed")); 
 // Retrieve memory managed bean from management factory. MemoryMXBean memBean = ManagementFactory.getMemoryMXBean() ; MemoryUsage heap = memBean.getHeapMemoryUsage(); MemoryUsage nonHeap = memBean.getNonHeapMemoryUsage(); // Retrieve the four values stored within MemoryUsage: // init: Amount of memory in bytes that the JVM initially requests from the OS. // used: Amount of memory used. // committed: Amount of memory that is committed for the JVM to use. // max: Maximum amount of memory that can be used for memory management. System.err.println(String.format("Heap: Init: %d, Used: %d, Committed: %d, Max.: %d", heap.getInit(), heap.getUsed(), heap.getCommitted(), heap.getMax())); System.err.println(String.format("Non-Heap: Init: %d, Used: %d, Committed: %d, Max.: %d", nonHeap.getInit(), nonHeap.getUsed(), nonHeap.getCommitted(), nonHeap.getMax())); 

Así es como obtienes el MemoryMXBean de forma remota (para complementar la respuesta de @ Adamski):

 MemoryMXBean memoryMXBeanProxy = JMX.newMXBeanProxy( conn, new ObjectName("java.lang:type=Memory"), MemoryMXBean.class);