是否可以使用远程JVM获取MemoryMXBean实例?

时间:2009-05-13 09:38:33

标签: java mbeans

我发现这篇很好的文章解释了如何查询虚拟机http://recursor.blogspot.com/2006/10/memory-notifications-in-java.html

的当前内存

我的问题是,是否可以轻松地从远程VM获取MemoryMXBean类的实例(以及我该怎么做),还是必须手动查询MBean?

2 个答案:

答案 0 :(得分:1)

您可以远程查询JMX bean。请参阅JMX教程中的JMX Connectors部分。

直截了当的方法可能是使用JConsole来确定您要查询的内容(在本例中为您的MemoryMXBean),然后围绕该代码进行编码。

答案 1 :(得分:1)

this page所述,您可以使用MBeanServerConnection远程访问它:

   MBeanServerConnection mbs;

   // Connect to a running JVM (or itself) and get MBeanServerConnection
   // that has the JVM MXBeans registered in it
   ...

   try {
       // Assuming the RuntimeMXBean has been registered in mbs
       ObjectName oname = new ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);

       // Get standard attribute "VmVendor"
       String vendor = (String) mbs.getAttribute(oname, "VmVendor");
   } catch (....) {
       // Catch the exceptions thrown by ObjectName constructor
       // and MBeanServer.getAttribute method
       ...
   }

但是,据我所知,您将无法使用Java界面,您需要查询所需的属性

CompositeDataSupport mem = (CompositeDataSupport)serv.getAttribute(memory, "NonHeapMemoryUsage") ;

mem.get("committed")

这是非常糟糕的('stringly-typed'界面,正如他们在另一个问题中所说的那样)。

正如Brian Agnew所说,JConsole视图非常有用,可以找出所需信息的存储位置。