Подготовка к участию в семинаре
Для выполнения практической части семинара вам понадобится личный компьютер/ноутбук. Материал протестирован на Windows 7/10, Linux и MacOS.
Дальнейшие инструкции предполагают, что директория LABDIR используется для установки учебных материалов.
Погдотовка ПО
Java
Вам потребуется JDK 8 (update 144 или выше) от Oracle или OpenJDK.
git
Для работы с материалом семинара вам понадобится git клиент с поддержкой коммандной строки.
Maven
Для запуска демонстрационных проектов необходим Maven версии 3.3.9 или выше.
После инсталяции убедитесь, что команда mvn --version корректно работает из консоли и возвращает правильные номера версий.
VisualVM
VisualVM входит в состав JDK 8, мы будем использовать последнюю версию 1.4.3. VisualVM доступна на оффициальном сайте - https://visualvm.github.io/.
Eclipse Memory Analyzer (опционально)
Eclipse MAT не будет использоваться в демонстрационных примерах, но если у вас возникнет желание попробовать инструмент самостоятельно, вы можете найти диструбутив тут.
HeapLib CLI
HeapLib библиотека используящая модифицированную версию парсера дампов NetBeans для возможности програмоного анализа дампов памяти JVM. Проект включает CLI позволяющий работать в дампами из коммандной строки.
Скачайте heap-cli-0.1.jar по ссылке и coхраните в директории LABDIR.
Выполните следующюю комманду
java -jar LABDIR/heap-cli-0.1.jar --commands
В результате должен быть распечатан список подкомманд sjk.
grep - A simple way to extract strings and other simple data from dump
histo - Class histogram
exec - OQL Script executor
mask - Patch heap dump on disk to mask out certain data
Загрузка учебных материалов
Мы будет использовать директорию LABDIR/ для разимещения всех учебных материалов.
Пример deadlock
В папке LABDIR/ выполните следующие :
git clone -b bench/deadlock/master https://github.com/aragozin/proflab.git deadlock
Сборка должна завершиться успешно.
cd deadlock
mvn clean package
Пример JEE eCommerce
git clone https://github.com/aragozin/BroadLeafCommerce-DemoSite.git blc-demo
cd blc-demo
mvn clean package
Сборка должна закончиться успешно.
mvn -P run test
Команда вызывает развёртывание компонентов приложения. При первом запуске это может занять несколько минут.
После успешного завершения команды, проверьте доступоность приложения http://localhost:8080. Затем остановить демонстрационный стенд командой ниже.
mvn clean
Демострационные примеры
Работа с дампом Broad Leaf Commerce
Получение дампа
Запустите VisualVM.
Перейдите в директорию LABDIR/blc-demo. Выполните следующую комманду:
mvn -P run_n_load test
Комманда запускает приложение и генератор нагрузки.
После завершения коммады подключитесь в VisualVM к процессу com.commerce.SiteApplication и снимите дамп памяти.
Завершите стенд коммандой:
mvn clean
Сохраните дамп памяти в директории LABDIR
Пример OQL
var summary = {};
length(map(
filter(
heap.objects(heap.findClass("java.lang.ref.Finalizer")),
function(f) {
return !identical(f, f.next);
}
),
function(f) {
var cname = f.referent.clazz.name
var rsize = rsizeof(f.referent);
if (!summary[cname]) {
summary[cname] = {name: cname, count: 1, rsize: rsize};
}
else {
summary[cname].count++;
summary[cname].rsize += rsize;
}
return rsizeof(f.referent);
}
));
summary;
Работа с дампом deadlock
Запустите VisualVM.
Перейдите в директорию LABDIR/deadlock. Выполните следующую комманду:
mvn -P rw_lock test
После зависания примера, снимите дамп памяти в VisualVM и сохраните его к директирии LABDIR