Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Старое ПППП / Лабораторная работа №7 / Лабораторная работа №7. Анализ производительности с помощью Java Mission Control

.pdf
Скачиваний:
85
Добавлен:
17.04.2018
Размер:
413.5 Кб
Скачать

Практикум по промышленному программированию ­ 2015. Лабораторная работа №7

Лабораторная работа №7

Анализ производительности с помощью Java Mission Control

Цель работы:ознакомиться с инструментом анализа производительности Java Mission Control, научиться анализировать производительность программного обеспечения.

Необходимое ПО для практической части:JDK 8; IntelliJ IDEA 14 Community Edition; Java Mission Control (входит в JDK 8).

Теоретические сведения

Динамический анализ кода​(англ. Dynamic program analysis) — анализ программного обеспечения, выполняемый при помощи выполнения программ на реальном или виртуальном процессоре (в отличие от статического анализа). Утилиты динамического анализа могут требовать загрузки специальных библиотек, перекомпиляцию программного кода. Некоторые утилиты могут инструментировать исполняемый код в процессе исполнения или перед ним. Для большей эффективности динамического анализа требуется подача тестируемой программе достаточного количества входных данных, чтобы получить более полное покрытие кода. Также требуется позаботиться о минимизации воздействия инструментирования на исполнение тестируемой программы (включая временные характеристики).

Существует такая статистика: 20% кода выполняется 80% времени. Точность ее вряд ли полностью соответствует реальному положению вещей, а вот общий смысл таков: получается, что оптимизация всего приложения – неоптимальное занятие, а реальные результаты может дать только оптимизация тех 20% приложения, которые выполняются дольше всего. Причем найти эти 20% несложно.

Профилирование​— сбор характеристик работы программы, таких как время выполнения отдельных фрагментов (обычно подпрограмм), число верно предсказанных условных переходов, число кэш­промахов и т. д. Также это означает "выявление узких мест программы" или "бутылочных горлышек", а именно – всех тех участков кода, на которых программа начинает "пробуксовывать", заставляя пользователя ждать. Инструмент, используемый для анализа работы, называют профилировщиком или профайлером (англ. profiler). Обычно выполняется совместно с оптимизацией программы.

Характеристики могут быть аппаратными (время) или вызванные программным обеспечением (функциональный запрос). Инструментальные средства анализа программы чрезвычайно важны для того, чтобы понять поведение программы. Проектировщики ПО нуждаются в таких инструментальных средствах, чтобы оценить, как хорошо выполнена работа. Программисты нуждаются в инструментальных средствах, чтобы проанализировать их программы и идентифицировать критические участки программы.

Это часто используется, чтобы определить, как долго выполняются определенные части программы, как часто они выполняются, или генерировать граф вызовов (Call Graph). Обычно эта информация используется, чтобы идентифицировать те участки программы, которые работают больше всего. Эти трудоёмкие участки могут быть оптимизированы, чтобы выполняться быстрее.

Также выделяют ​анализ покрытия​(Code Coverage) — процесс выявления неиспользуемых участков кода при помощи, например, многократного запуска программы.

Java Mission Control

В данной лабораторной работе для анализа будет использоваться инструмент Java Mission Control. Java Mission Control и Java Flight Recorder (инструмент для записи событий) собирают в непрерывном режиме информацию о работе ПО Java от виртуальных машин JVM и других генераторов событий, например, серверов приложений.

Практическая часть

Для начала анализа необходимо настроить подключение профайлера Java Flight Recorder, работающего вместе с Java Mission Control при запуске вашего приложения.

­1­

Практикум по промышленному программированию ­ 2015. Лабораторная работа №7

Запуск приложения с IntelliJ IDEA

В поле “VM options” необходимо вставить следующее:

­XX:+UnlockCommercialFeatures ­XX:+FlightRecorder ­XX:StartFlightRecording=duration=60s,filename=myrecording.jfr

Это ­ параметры для JVM, указывающие, что нужно включить функцию записи Flight Recorder, продолжать запись 60 секунд, и записывать результаты профилирования в файл myrecording.jfr. Вы можете изменить последние два параметра.

Запуск приложения с помощью Gradle

В файле build.gradle необходимо добавить следующее: run {

jvmArgs "­XX:+UnlockCommercialFeatures", "­XX:+FlightRecorder", "­XX:StartFlightRecording=duration=60s,filename=myrecording.jfr"

}

Это позволит при запуске команды run запускать профилировщик.

­2­

Практикум по промышленному программированию ­ 2015. Лабораторная работа №7

Анализ в Java Mission Control

После запуска программы и формирования файла *.jfr необходимо запустить Java Mission Control. (Меню ­> Все программы ­> Java Development Kit ­> Java Mission Control или C:\Program Files\Java\jdk1.8.0_31\bin\jmc.exe).

Далее в меню File ­> Open необходимо открыть файл, сформированный профилировщиком. Переключение между различными видами осуществляется с помощью боковых кнопок. Внутри

видов также есть вкладки, как правило, посредине и внизу. Подробнее о различных метриках, наблюдаемых в JMC ­

http://blog.takipi.com/oracle­java­mission­control­the­ultimate­guide/

На скриншотах далее показаны данные, полученные в результате профилирования программы, сравнивающей конкатенацию строк с помощью String, StringBuilder и StringBuffer.

­3­

Практикум по промышленному программированию ­ 2015. Лабораторная работа №7

Задание для самостоятельной работы

Необходимо провести анализ программ, разработанных в 3 и 5 лабораторных работах: найти “узкие места” программы, определить потребление памяти. Если при статическом анализе в 6 лабораторной работе были найдены Performance Issues ­ то их разрешение также необходимо проанализировать (сделать профилировку до разрешения замечания и после, а затем сравнить их).

Литература, ссылки

1.https://xakep.ru/2011/03/22/55102/

2.https://ru.wikipedia.org/wiki/%C4%E8%ED%E0%EC%E8%F7%E5%F1%EA%E8%E9_%E0%ED% E0%EB%E8%E7_%EA%EE%E4%E0

3.https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D 1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%28%D0%B8%D0%BD%D1%84 %D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29

4.http://www.prosysopc.com/blog/using­java­mission­control­for­performance­monitoring/

5.http://www.osp.ru/news/2013/0918/13020915/

6.http://www.oracle.com/technetwork/java/javaseproducts/mission­control/index.html

7.http://publib.boulder.ibm.com/httpserv/cookbook/Java­Java_Profilers.html

­4­