Анализ с помощью JDK Mission Control
Читайте записи JFR
«Анализ с помощью JDK Mission Control» — бесплатный урок Java Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Что такое JMC?
JDK Mission Control (JMC) — графический инструмент для анализа записей JFR.
Он открывает файл .jfr и превращает необработанные события в представления, по которым можно перемещаться: горячие методы, поведение сборки мусора, конкуренция за блокировки, выделение памяти и многое другое. Он также содержит страницу автоматического анализа, которая отмечает вероятные проблемы.
Загрузка JMC
JMC распространяется как отдельное приложение (после JDK 8 его отделили от JDK).
Загрузите его из сборок JMC Adoptium или Oracle, запустите и откройте файл .jfr с помощью Файл > Открыть файл. Агент или перезапуск приложения не требуются — анализируйте уже полученную запись.
Страница автоматического анализа
Первое, что показывает JMC, — это автоматический анализ: набор эвристик, оценивающих Вашу запись.
Он отмечает такие проблемы, как длительные паузы сборки мусора, большое количество выделений памяти, заблокированные потоки и упаковка примитивов в объекты. Для каждого результата указаны степень серьёзности и краткое объяснение — это отличная отправная точка перед подробным ручным исследованием.
Представление профилирования методов
Страница профилирования методов объединяет выборки выполнения в дерево вызовов.
Методы с наибольшим собственным временем являются горячими точками CPU. Переключайтесь между представлениями сверху вниз (от вызывающего к вызываемому) и снизу вверх (сначала горячий метод), чтобы понять и то, что работает медленно, и то, кто это вызывает.
Пламенные графики
JMC отображает выборки стека в виде пламенного графика: его ширина пропорциональна затраченному времени.
Широкие плато в верхней части графика показывают, где CPU действительно расходует свои циклы. Благодаря этому представлению сразу видно, какой путь вызовов доминирует, гораздо быстрее, чем при чтении отсортированной таблицы.
Представление сборки мусора
Страницы сборки мусора показывают длительность пауз, частоту и то, какой сборщик работал.
Ищите длительные или частые паузы, которые ухудшают задержку. Высокая скорость выделения памяти обычно связана с частыми сборками мусора молодого поколения — исправление заключается в уменьшении количества создаваемых объектов, а не в смене сборщика.
Горячие точки выделения памяти
Представление выделений TLAB в JMC ранжирует места создания объектов.
Сопоставьте эти данные с трассировкой стека, чтобы найти точную строку, в которой выполняется выделение памяти в горячем цикле. Нередко небольшое изменение — повторное использование буфера или отказ от автоупаковки — значительно снижает нагрузку на сборщик мусора.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Autoboxing: each add boxes an int into an Integer object
List<Integer> boxed = new ArrayList<>();
for (int i = 0; i < 5; i++) boxed.add(i);
System.out.println("Boxed " + boxed.size() + " Integers");
System.out.println("JMC allocation view would flag this hotspot");
}
}Конкуренция за блокировки
Представления экземпляров блокировок и мониторов Java показывают, какие потоки ожидают синхронизации.
Если многие потоки блокируются на одном мониторе, эта блокировка становится узким местом масштабирования. JMC показывает объект, из-за которого возникает конкуренция, и трассировки стеков ожидающих потоков, чтобы Вы могли выбрать правильную критическую секцию.
Представления потоков и задержек
Страница потоков показывает временную шкалу каждого потока: выполняется на CPU, приостановлен, ожидает IO или заблокирован.
Так Вы можете подтвердить, ограничено ли замедление CPU или IO, — именно это различие рассматривалось в уроке об узких местах. Широкие полосы «ожидания» означают, что ограничение связано с IO или блокировкой, а не с вычислениями.
От обнаружения проблемы к исправлению
Рабочий процесс таков: откройте запись, изучите автоматический анализ, углубитесь в отмеченную область (профилирование методов, сборка мусора или блокировки), подтвердите вывод с помощью пламенного графика и представления потоков, а затем сформулируйте гипотезу.
Измените что-то одно, повторно создайте запись и сравните результат с базовым показателем. JMC превращает двоичный файл в практические выводы.
Сравнение записей
Чтобы доказать эффективность оптимизации, сравните записи, сделанные «до» и «после».
Создайте базовую запись JFR, внесите одно изменение, создайте ещё одну запись и откройте обе в JMC. Сравнивайте одни и те же представления — профилирование методов, сборку мусора и выделение памяти — рядом. Реальное улучшение проявится в сокращении собственного времени, уменьшении числа пауз сборки мусора или снижении скорости выделения памяти. Если ничего не изменилось, отмените изменение.
Быстрая проверка
Что означает собственное время метода (или широкое плато в верхней части графика) в представлениях профилирования методов и пламенного графика JMC?
Итоги
JMC читает записи JFR и превращает их в практические данные:
- Автоматический анализ заранее отмечает вероятные проблемы.
- Профилирование методов и пламенные графики показывают горячие точки CPU через собственное время.
- Представления сборки мусора и выделения памяти выявляют избыточное создание объектов.
- Представления блокировок и потоков позволяют отличить ограничение CPU от ограничения IO или блокировками.
- Углубитесь в проблему, сформулируйте гипотезу, исправьте что-то одно, создайте новую запись и сравните результаты.
Часто задаваемые вопросы
Урок «Анализ с помощью JDK Mission Control» бесплатный?
Да — полный текст урока «Анализ с помощью JDK Mission Control» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Анализ с помощью JDK Mission Control»?
Читайте записи JFR Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Анализ с помощью JDK Mission Control»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выявление узких мест
- Java Flight Recorder
- Анализ с помощью JDK Mission Control
- Распространённые флаги настройки JVM