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, работающие локально по умолчанию:
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
:
Введите комбинацию хост:порт в поле
Connection
в появившемся диалоговом окне и нажмите OK.
В случае успеха мы теперь сможем увидеть окно мониторинга, дважды щелкнув новое соединение на левой панели:
5. Вывод
В этой статье мы рассмотрели удаленный мониторинг приложений Java с помощью VisualVM и JMX.