Перейти к основному содержимому

Удаленный мониторинг с помощью VisualVM и JMX

· 4 мин. чтения

1. Введение

В этой статье мы узнаем, как использовать VisualVM и Java Management Extensions (JMX) для удаленного мониторинга приложений Java.

2. ДжМХ

JMX — это стандартный API для управления и мониторинга приложений JVM . JVM имеет встроенный инструментарий, который JMX может использовать для этой цели. В результате мы обычно называем эти утилиты «готовыми инструментами управления» или, в данном случае, «JMX-агентами».

3. Визуальная виртуальная машина

VisualVM — это визуальный инструмент, предоставляющий упрощенные возможности профилирования для JVM. Существует множество других основных инструментов профилирования . Однако VisualVM является бесплатным и поставляется в комплекте с выпуском JDK 6U7 до ранних обновлений JDK 8. Для других версий Java VisualVM доступен как отдельное приложение.

VisualVM позволяет нам подключаться как к локальным, так и к удаленным приложениям JVM для целей мониторинга.

При запуске на любой машине он автоматически обнаруживает и начинает отслеживать все приложения JVM, работающие локально . Однако нам нужно явно подключать удаленные приложения.

3.1. Режимы подключения JVM

JVM предоставляет себя для мониторинга с помощью таких инструментов, как jstatd или JMX . Эти инструменты, в свою очередь, предоставляют API для таких инструментов, как VisualVM, для получения данных профилирования.

Программа jstatd — это демон, входящий в состав JDK. Однако его возможности ограничены. Например, мы не можем отслеживать загрузку процессора или делать дампы потоков.

С другой стороны, технология JMX не требует запуска какого-либо демона на JVM. Более того, его можно использовать для профилирования как локальных, так и удаленных приложений JVM. Однако нам нужно запустить JVM со специальными свойствами, чтобы включить готовые функции мониторинга. В этой статье мы сосредоточимся только на режиме JMX.

3.2. Запуск

Как мы видели ранее, наша версия JDK может либо поставляться в комплекте с VisualVM, либо нет. В любом случае мы можем запустить его, выполнив соответствующий двоичный файл:

./jvisualvm

Если двоичный файл находится в папке $JAVA_HOME/bin , то приведенная выше команда откроет интерфейс VisualVM, и он может находиться в другой папке, если установлен отдельно.

VisualVM запустит и загрузит все приложения Java, работающие локально по умолчанию:

./de65c4a5f0e98364e7b7238c36106efb.png

3.3. Функции

VisualVM предоставляет несколько полезных функций:

  • Отображение локальных и удаленных процессов приложений Java
  • Мониторинг производительности процесса с точки зрения использования ЦП, активности сборщика мусора, количества загруженных классов и других показателей.
  • Визуализация потоков во всех процессах и времени, которое они проводят в разных состояниях, таких как сон и ожидание.
  • Получение и отображение дампов потоков для немедленного понимания того, что происходит в отслеживаемых процессах.

Страница функций VisualVM содержит более полный список доступных функций. Как и все хорошо спроектированное программное обеспечение, VisualVM можно расширить , чтобы получить доступ к более продвинутым и уникальным функциям, установив сторонние плагины, доступные на вкладке Плагины .

4. Удаленный мониторинг

В этом разделе мы покажем, как удаленно отслеживать приложение Java с помощью VisualVM и JMX. У нас также будет возможность изучить все необходимые конфигурации и параметры запуска JVM.

4.1. Конфигурация приложения

Мы запускаем большинство, если не все, Java-приложений с помощью скрипта запуска. В этом сценарии команда запуска обычно передает основные параметры JVM, чтобы указать потребности приложения, такие как максимальные и минимальные требования к памяти.

Предполагая, что у нас есть приложение, упакованное как MyApp.jar , давайте посмотрим пример команды запуска, которая включает основные параметры конфигурации JMX:

java -Dcom.sun.management.jmxremote.port=8080 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false 
-Xms1024m -Xmx1024m -jar MyApp.jar

В приведенной выше команде MyApp.jar `` запускается с готовой возможностью мониторинга, настроенной через порт 8080. Кроме того, для простоты мы отключили шифрование SSL и аутентификацию по паролю.

В производственных условиях в идеале мы должны обеспечить безопасность связи между VisualVM и приложением JVM в общедоступной сети.

4.2. Конфигурация VisualVM

Теперь, когда у нас есть VisualVM, работающий локально, и наш MyApp.jar , работающий на удаленном сервере, мы можем начать сеанс удаленного мониторинга.

Щелкните правой кнопкой мыши на левой панели и выберите Добавить соединение JMX :

./f28896c9fac622646e2fd78b2b63dc8a.png

Введите комбинацию хост:порт в поле Connection в появившемся диалоговом окне и нажмите OK.

В случае успеха мы теперь сможем увидеть окно мониторинга, дважды щелкнув новое соединение на левой панели:

./11fe8df4afde18e15f588195628b9a64.png

5. Вывод

В этой статье мы рассмотрели удаленный мониторинг приложений Java с помощью VisualVM и JMX.