package es.jnovo; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.Set; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import com.sun.tools.attach.AgentInitializationException; import com.sun.tools.attach.AgentLoadException; import com.sun.tools.attach.AttachNotSupportedException; import com.sun.tools.attach.VirtualMachine; import com.sun.tools.attach.VirtualMachineDescriptor; import com.sun.tools.attach.spi.AttachProvider; public class Jvm { public static void main(String[] args) { systema(); } public static String systema() { StringBuilder salida = new StringBuilder(); try { final AttachProvider attachProvider = AttachProvider.providers().get(0); VirtualMachineDescriptor descriptor = null; for (VirtualMachineDescriptor virtualMachineDescriptor : attachProvider.listVirtualMachines()) { // System.out.println(virtualMachineDescriptor.displayName()); if (virtualMachineDescriptor.displayName().contains("eclipse")) { descriptor = virtualMachineDescriptor; } } if (descriptor == null) throw new RuntimeException("No tienes descriptor de la maquina virtual"); VirtualMachine virtualMachine; virtualMachine = attachProvider.attachVirtualMachine(descriptor); final String home = virtualMachine.getSystemProperties().getProperty("java.home"); final String agent = home + File.separator + "lib" + File.separator + "management-agent.jar"; virtualMachine.loadAgent(agent); final Object portObject = virtualMachine.getAgentProperties().get("com.sun.management.jmxremote.localConnectorAddress"); final JMXServiceURL target = new JMXServiceURL(portObject + ""); final JMXConnector connector = JMXConnectorFactory.connect(target); final MBeanServerConnection remote = connector.getMBeanServerConnection(); // listamos los threads del sistema ObjectName objName = new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME); Setmbeans = remote.queryNames(objName, null); for (ObjectName name : mbeans) { ThreadMXBean threadBean = ManagementFactory.newPlatformMXBeanProxy(remote, name.toString(), ThreadMXBean.class); long threadIds[] = threadBean.getAllThreadIds(); for (long threadId : threadIds) { ThreadInfo threadInfo = threadBean.getThreadInfo(threadId); System.out.println(threadInfo.getThreadName() + " / " + threadInfo.getThreadState()); } } } catch (AttachNotSupportedException e) { } catch (IOException e) { } catch (AgentLoadException e) { } catch (AgentInitializationException e) { } catch (MalformedObjectNameException e) { } return salida.toString(); } }
Este blog pretende recopilar ideas que me van surgiendo con los días y compartirlas con los demás.
29 junio 2014
Conectándote a la Máquina Virtual de Java (JVM)
La entrada de hoy va de como te conectas a la máquina virtual de java mediante programación, y te preguntarás ¿para qué me voy a conectar a la maquina virtual?, pues muy fácil, podrás controlar la memoria, threads y leer las propiedades del sistema.
Etiquetas:
java,
jmx,
jvm,
programacion
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario