Готовая функция JMX для управления виртуальной машиной Java - PullRequest
0 голосов
/ 16 марта 2010

Изучая JMX, я увидел, что одной из его важных особенностей является то, что он может управлять самой JVM, и я не понял, в каком смысле он может управлять JVM. Так может кто-нибудь прояснить это с некоторыми примерами.

1 Ответ

3 голосов
/ 16 марта 2010

Вы можете легко убедиться в этом сами.

  • Шаг 1: Загрузить JConsole
  • Шаг 2. Запуск процесса Java (Java 5 или более поздняя версия)
  • Шаг 3. Подключение к процессу Java с помощью JConsole
  • Шаг 4. Просмотр MBeans для запуска события дампа кучи, запроса на сборку мусора, информации о потоках, загруженных классов и т. Д.

Особенно интересно то, что вы можете написать код для доступа к MBeans запущенной Java-программы:

Есть три разных способа получить доступ к интерфейсам управления. Вызов методы в MXBean напрямую в той же виртуальной машине Java.

RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();

   // Get the standard attribute "VmVendor"    String vendor = mxbean.getVmVendor();

Пройдите через MBeanServerConnection подключение к платформе MBeanServer работающей виртуальной машины.

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
       ...    }

Использовать прокси MXBean.

MBeanServerConnection mbs;

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

   // Get a MBean proxy for RuntimeMXBean interface    RuntimeMXBean proxy = 
       ManagementFactory.newPlatformMXBeanProxy(mbs,
                                                ManagementFactory.RUNTIME_MXBEAN_NAME,
                                                RuntimeMXBean.class);    // Get standard attribute "VmVendor"     String vendor = proxy.getVmVendor();

См. Также API управления языком Java

...