Описание
“Это Java памяти много ест. Надо ей ещё добавить” – типичная отмазка резолюция от разработчиков, которым некогда/неохота/тяжело разбираться с истинной причиной очередного OutOfMemoryError
на production. Повезло, если такое предложение прокатит и не повторится, но, скоре всего, рано или поздно разбираться всё же придётся.
В таких случаях, как правило, нужно сделать снимок памяти (heap dump), но с ним не всё так просто: он может много весить, его бывает не легко достать с production, в него не посмотришь “глазами” (он бинарный), а в спец. инструментах данных столько, что можно утонуть.
На этом треннинге вы научитесь снимать дампы памяти разными способами (в зависимости от окружения), ускорять и упрощать их передачу к себе для анализа и, главное, овладеете техниками и инструментами для эффективного обнаружения источников проблем с потреблением памяти: от построения наглядных отчётов до глубокого анализа графа объектов через язык запросов.
Содержание
Теория 🎓
- Что такое дамп памяти JVM
- И чем он не является
- Связь с core dump
- Предостережения о дампах памяти
- (Безопасность и обфускация дампов)
- Способы получения
- Внешними инструментами (4 шт.)
- Инструментами JDK (4 шт.)
- Алгоритм выбора инструмента
- Как сделать снятие дампов автоматическим
- Основы устройства дампов:
- Особенности размеров объектов в памяти JVM
- GC roots
- Shallow size VS retained size
- Дерево доминаторов
- Анализ дампов в Eclipse MAT
- Основные данные из дампа в Eclipse MAT
- Базовые приёмы навигации по куче
- Продвинутые приёмы (включая OQL)
Практика ⚒️
Разбор четырёх багов (разновидностей утечек памяти) на примере лабораторного приложения Spring PetClinic REST по схеме:
- Описание кейса
- Имплементация (пояснения к реализации)
- Проблема
- Обнаружение (подсказки к проведению анализа)
- Причина
Все три кейса последовательны: для воспроизведения следующего нужно будет найти и устранить причину предыдущего.
Примеры слайдов
Из теоретической части занятия
Интересно?
Если хотите, чтобы я провёл этот тренинг в вашей компании, вы можете: