Возможно ли получить экземпляр MemoryMXBean с удаленной JVM? - PullRequest
2 голосов
/ 13 мая 2009

Я нашел эту замечательную статью, в которой объясняется, как запрашивать текущую память для вашей виртуальной машины http://recursor.blogspot.com/2006/10/memory-notifications-in-java.html

У меня вопрос: возможно ли легко получить экземпляр класса MemoryMXBean с удаленной виртуальной машины (и как мне это сделать), или мне нужно вручную запросить MBeans?

Ответы [ 2 ]

1 голос
/ 01 июля 2010

как описано на на этой странице Вы можете получить к нему доступ удаленно, с помощью 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")

, что довольно ужасно (интерфейс «строкового типа», как они сказали в другом вопросе).

Как сказал Брайан Агнью, представление JConsole очень полезно, чтобы узнать, где хранится нужная вам информация.

1 голос
/ 13 мая 2009

Вы можете запрашивать компоненты JMX удаленно. См. Раздел JMX Connectors в руководстве по JMX.

Простым подходом может быть использование JConsole для определения того, что вы хотите запросить (в данном случае ваш MemoryMXBean), а затем код вокруг этого.

...