Поздравляем с Новым Годом!
   
Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 16(60)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3

Библиографическое описание:
Яндимиров М.А. АНАЛИЗ СРЕДСТВ МОНИТОРИНГА КОРПОРАТИВНЫХ JAVA ПРИЛОЖЕНИЙ // Студенческий: электрон. научн. журн. 2019. № 16(60). URL: https://sibac.info/journal/student/60/138950 (дата обращения: 28.12.2024).

АНАЛИЗ СРЕДСТВ МОНИТОРИНГА КОРПОРАТИВНЫХ JAVA ПРИЛОЖЕНИЙ

Яндимиров Михаил Аркадьевич

студент 2 курса магистратуры, кафедра информационных систем, Университет ИТМО,

РФ, г. Санкт-Петербург

Обозначения и сокращения:

  • JMX – Java Management Extensions
  • REST – Representational State Transfer
  • API – Application Programming Interface
  • JAR – Java Archive
  • MBean – Managed Bean
  • JVM – Java Virtual Machine
  • GC – Garbage Collector
  • OQL – Object Query Language
  • PID – process identifier
  • RMI – remote method invocation

Введение:

Неоднократно разработчики приложений сталкиваются с проблемами, связанными с мониторингом приложений (узнать stack trace какого-либо потока исполнения приложения, узнать количество потребляемой оперативной памяти, а также понять почему приложение находится в состоянии сборки мусора, вместо выполнения им полезной работы).  В такие моменты хочется иметь побольше встроенных в приложение возможностей, для своевременного устранения проблем и сбора некой статистики по работе приложения. Особенно сложно становится обслуживать серверные приложения, у которых нет доступа к графическому или веб-интерфейсу, в которых единственной возможностью наблюдения за приложением является чтение логов, которые могут превышать огромных размеров. Логирование – полезная вещь, но всю работу приложения не всегда возможно логировать, т.к. объем для хранения логов на жестком диске растет, и он не бесконечен, помимо роста размера файла логов, также приложение частично тратит время на то, что занимается записью в файл сообщений, а также синхронизацией между ними. Если речь идет о REST сервисах, то становится очевидным, что не всегда возможно записать в лог все входящие запросы, а также ответы от сервера, т.к. они могут содержать конфиденциальную информацию, кроме того, запросы могут достигать больших размеров.

Основная часть:

  1. Анализ стандартных утилит мониторинга Java приложений

На текущий момент язык программирования Java имеет в комплекте следующие консольные утилиты:

  • Jmap (Java Memory Map):

Данная утилита позволяет посмотреть на текущие состояние используемой приложением оперативной памяти. С помощью данной утилиты можно создать снимок текущих объектов, существующих в памяти запущенного под управлением JVM процесса и сохранить его в бинарный файл с расширением hprof. Jmap позволяет получить текстовую гистограмму, содержащую информацию о наиболее весомые объекты в памяти. Помимо, просмотра существующих в памяти объектов и их экспорта jmap предоставляет возможность вызывать полную сборку мусора у запущенного под управлением JVM процесса. Стоит отметить, что jmap позволяет анализировать только текущее состояние процесса [4].

  • Jstat (Java Virtual Machine Statistics Monitoring Tool):

Инструмент позволяющий выводить на экран статистику производительности для процесса, запущенного под управлением JVM. Данная утилита необходима для вывода информации о занятой оперативной памяти в разных регионах JVM (молодом и старом поколениях), информации о количестве сборок мусора (малых и больших), времени затраченного на сборку мусора, информации об используемом сборщике мусора. Данная утилита позволяет указывать интервал, с которым необходимо выводить статистику на экран [6].

  • Jhat (Java Heap Analysis Tool):

Утилита, предназначенная для анализа снимков состояния памяти процесса, запущенного под управлением JVM. Входными данными для этой утилиты является файл с расширением hprof, который можно получить с помощью вышеописанной утилиты jmap, а также он может быть сгенерирован при завершении приложения с ошибкой OutOfMemoryError, которая сигнализирует о том, что приложению не хватает оперативной памяти для его корректной работы. Стоит учесть, что данный файл генерируется только случае, если приложение было запущено с опцией -XX:+HeapDumpOnOutOfMemoryError. Данная команда поддерживает запросы, написаные с помощью языка OQL [7].

  • Jps (Java Virtual Machine Process Status Tool):

Утилита, предназначенная для вывода на экран, запущенных процессов, находящихся под управлением JVM. Для многих инструментов, основанных на использовании командной строки, требуется определить Java процесс для дальнейшего его анализа. Соответственно, с помощью данной утилиты можно получить информацию о запущенных Java приложениях, узнать их PID а также командную строку, с помощью которой был запущен процесс.

  • Jstack (Java Stack Trace):

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

Данные утилиты безусловно являются полезными, когда у пользователя нет доступа к графическому интерфейсу, чаще всего такое случается, когда приложение запущено на сервере под управлением операционной системы Linux. Далее будут рассмотрены готовые решения, которые возможно использовать, не подключаясь на сервер, запущенного приложения [5].

  1. Анализ существующих готовых решений, позволяющих проводить мониторинг Java приложений

Для начала стоит отметить, что почти все текущие решения используют JMX – технологию Java, предназначенную для мониторинга и управления (как локального, так и удаленного) различными объектами, ресурсами приложения, разработанными на языке Java. Такие ресурсы называются Managed Beans (MBeans). Каждый такой объект реализует определенный интерфейс, с помощью которого можно получить доступ к значениям атрибутов этого объекта, вызвать какую-либо функцию или процедуру и получить соответствующий результат выполнения. Данные MBeans регистрируются в, так называемом, реестре объектов (MBean server). Доступ к управляемым объектом получается с помощью использования JMX коннекторов, которые предоставляют доступ для управления JMX клиентам. На рисунке 1 представлена характерная структура мониторинга Java приложения с помощью технологии JMX.

 

Рисунок 1. Характерная структура мониторинга приложения с помощью JMX

 

Любое Java приложение «из коробки» имеет возможность для его мониторинга, достаточно лишь запустить его с необходимыми параметрами, и JMX клиенты смогут подключаться к нему для управления, а также получения какой-либо информации [3].

Готовые решения для мониторинга Java приложений:

  • VisualVM:

Данный инструмент идет по умолчанию с JDK. Он позволяет проводить мониторинг оперативной памяти, используемой Java приложением, запускать различные профайлеры для процессора и памяти (не поддерживается для удаленных приложений), получать информацию о stack trace потоков, информацию и сборщике мусора и предоставляет список, доступных MBeans. Главный недостаток данного средства – слишком запутанный интерфейс, в котором довольно-таки непросто разобраться. Также не все приложения отдают во внешний мир порт для подключения по JMX, соответственно, в таком случае возможен мониторинг только локально запущенных приложений. С помощью VisualVM возможно увидеть только текущее состояние загруженности [8; 9].

  • Eclipse Memory Analyzer:

Eclipse Memory Analyzer используется для анализа дампов памяти приложения, считываемых из файлов расширения hprof. Данный инструмент позволяет провести «оффлайн» сборку мусора для анализируемого дампа, соответственно данный инструмент может визуально показать недостижимые объекты в памяти, для которых требуется сборка мусора. Стоит отметить, что данный инструмент не использует JMX технологию, следовательно, данный инструмент может быть полезен для изучения существующих дампов памяти [10].

  • SpringBoot Actuator:

SpringBoot Actuator – один из многочисленных модулей фреймворка Spring, для Java приложений. Данный модуль позволяет с легкостью встроить его в любое существующее веб приложение. Он предоставляет ресурсы, доступные по протоколу HTTP, которые предоставляют статистику о приложении (используемую оперативную память, дисковое пространство).

Выводы

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

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

 

Список литературы:

  1. Spring Boot Actuator [Электронный ресурс]. URL: http://www.baeldung.com/spring-boot-actuators (дата обращения 23.06.2018)
  2. Jps – Java Virtual Machine Process Status Tool [Электронный ресурс]. URL:   https://docs.oracle.com/javase/7/docs/technotes/tools/share/jps.html/(дата обращения 23.06.2018)
  3. Пять секретов. контроля производительности Java, часть 2 [Электронный ресурс]. URL: https://www.ibm.com/developerworks/ru/library/j-5things8/index.html/(дата обращения 23.06.2018)
  4. Jmap – Memory Map [Электронный ресурс]. URL: https://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html(дата обращения 23.06.2018)
  5. Jstack – Stack Trace [Электронный ресурс]. URL: https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html (дата обращения 23.06.2018)
  6. Jstat – Java Virtual Machine Statistics Monitoring Tool [Электронный ресурс]. URL: https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html (дата обращения 23.06.2018)
  7. Jhat – Java Heap Analysis Tool [Электронный ресурс]. URL: https://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html (дата обращения 23.06.2018)
  8. VisualVM Documentation and Resources [Электронный ресурс]. URL: https://visualvm.github.io/documentation.html (дата обращения 23.06.2018)
  9. Работа с Java VisualVM при проведении нагрузочного тестирования [Электронный ресурс]. URL: https://habrahabr.ru/company/luxoft/blog/146988/ (дата обращения 23.06.2018)
  10. Eclipse Memory Analyzer documentation [Электронный ресурс]. URL: https://www.eclipse.org/mat/documentation/ (дата обращения 23.06.2018)

Оставить комментарий