thread que peak management consola and java jmx

java - que - ¿Cómo accedo al uso de la memoria mediante programación a través de JMX?



mbeans que es (4)

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

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

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 ningún problema mirando java.lang / Memory / Attributes / HeapMemory

¿Cómo obtendría la misma información de un programa Java que se ejecuta en una máquina virtual?

Ejemplos de las opciones de línea de comando necesarias, u otras cosas que se deben comenzar a apreciar.


La respuesta de @Kire se ve bien, pero pensé que agregaría 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 contra cualquier JVM que exporta información de 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"));


Necesitas configurar un JMXConnector. Aquí hay un fragmento de código que obtendrá el uso de memoria del montón comprometido 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 te importa la seguridad, puedes establecer el mapa en 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 mediante una interfaz de texto o un script. Puede usarse con WebLogic, pero funciona para cualquier programa Java en el que haya habilitado monitoreo remoto.


// 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()));