Учебник: Анализ данных профилирования
Цели и задачи
Данные профилирования процесса Java можно проанализировать с помощью панелей проекции Профилирование и протокол. Эти панели позволяют:
- Выявить объекты и методы, потребляющие больше всего времени
- Выявить классы, требовательные к памяти
- Оценить совместимость программ
- Обнаружить утечки памяти
- Отследить выполнение каждого метода во времени
- Получить более широкое представление о динамике работы приложения
- Определить активные нити
- Определить время активности нитей
- Обнаружить часто вызываемые методы
- Проверить "сбор мусора"
- Определить различные этапы выполнения программы
- Исследовать различные вызовы одного и того же метода
- Исследовать программу, вызывающую метод
Необходимое время
1 час
Перед тем, как начать
Перед началом изучения этого учебника необходимо:
- Установить Eclipse Platform, включая пакеты Test и Performance Tools Platform (TPTP).
- Найти файл примеров профилирования (hcframe.jar) для импорта. Файл должен находиться в следующем каталоге:
каталог-установки-TPTP\eclipse\plugins\org.eclipse.tptp.platform.collection.framework_4.0.0
Описание
В этом учебнике с помощью панелей проекции Профилирование и протокол будет анализироваться пример класса PerformanceExample.class. Пример открывает окно с двумя кнопками.
Вам потребуется выполнить следующее:
- Открыть в рабочей среде проекцию Профилирование и протокол
- Выполнить профилирование класса PerformanceExample
- Проанализировать данные профилирования
Обновить панель во время наблюдения за приложением можно с помощью кнопки Обновить панели
.
В меню Окно выберите Открыть проекцию > Прочие > Профилирование и протоколы.
Для профилирования класса PerformanceExample выполните следующие действия:
- Нажмите кнопку Профилирование
и выберите из выпадающего списка Профилирование. Откроется окно запуска профилирования.
- Для создания новой конфигурации дважды щелкните на Внешнем Java-приложении.
- Перейдите на вкладку Главная.
- В поле Имя класса введите org.eclipse.hyades.test.collection.framework.PerformanceExample.
- Нажмите Добавить файл JAR и добавьте архив с этим классом.
- Выберитекаталог-установки-TPTP\eclipse\plugins\org.eclipse.tptp.platform.collection.framework_4.0.0\hcframe.jar
- Нажмите Открыть. Архив JAR будет добавлен.
- Выберите вкладку Монитор. Здесь можно указать критерии профилирования.
- На вкладке Монитор разверните раздел Профилирование Java, выберите Простой анализ памяти и включите переключатель
рядом с ним. В список собираемых данных добавится
информация о памяти.
- Выберите пункт Анализ времени выполнения и включите переключатель рядом с ним.
Эта опция позволяет анализировать данные о времени с помощью статистических панелей. Для того чтобы получить возможность работать с панелями Поток выполнения и Вызов метода, необходимо собрать графические сведения выполнения.
Так как этот пример рассчитан на ознакомление со всеми панелями профилирования, включая Поток выполнения и Вызов метода, при выборе опции
Анализ времени выполнения выберите в окне Опции редактирования профилирования Опции редактирования, Показать графические
сведения потока выполнения.
Кроме того, включите переключатель для опции Собрать граничащие классы, исключенные набором фильтров и установите Глубину
граничащего класса 1. Нажмите Готово.
- На странице Набор фильтров профилирования можно задать подмножество анализируемых данных. Эта возможность позволяет отфильтровать классы или пакеты, выходящие за рамки анализа.
Выберите сборщик данных Профилирование Java, затем выберите Опции редактирования. Откроется окно Набор фильтров. Для того чтобы добавить классы или пакеты, для которых необходимо собрать данные, в разделе Содержимое выбранного набора фильтров нажмите Добавить.
Откроется окно Добавить фильтр.
- Для профилирования этого класса введите org.eclipse.hyades.test.collection.framework.* в поле Класс.
- Для того чтобы включить методы только данного примера, в поле Имя метода введите *.
- Нажмите кнопку OK. Критерий фильтрации добавится в список данных.
- Для исключения остальных классов из списка фильтрации, найдите столбец Правило, щелкните на Включить и замените его на Исключить.
- Нажмите Далее для перехода на страницу Ограничения. Эта страница управляет объемом собираемых данных, ограничивая их
по времени или количеству вызовов метода. Оставьте значения по умолчанию. Нажмите Готово для завершения операции. В результате
внесенные изменения будут учтены.
- Перейдите на вкладку Назначение. Для хранения данных этого сеанса могут служить специальные стандартные ресурсы - ProfileProject и Default Monitor.
- Нажмите кнопку Выполнить профилирование.
- В результате этого действия будут созданы необходимые ресурсы, а в панели Монитор профилирования появится агент и процесс.
- Для того чтобы включить просмотр мониторов, выберите Распределенный макет, как показано на приведенной ниже иллюстрации. Это позволит увидеть монитор, где собраны ваши данные и данные о том компьютере, на котором запущена рабочая среда.

Наблюдение за поведением программы в течение некоторого периода времени
Пронаблюдать за работой приложения можно с помощью панели Поток выполнения и таблицы.
В этой панели выполнение всей программы представлено как графически, так и в виде таблицы. В панели потока выполнения время отображается на вертикальной оси. В таблице Поток выполнения, которая открывается под панелью Поток выполнения, показаны все нити, а также методы, вызываемые каждой нитью.
- В панели Монитор профилирования выберите ваш монитор, щелкните на нем правой кнопкой мыши и выберите Открыть с помощью > Поток выполнения. Откроется панель потока выполнения.
- Щелчком выберите метод для оценки. Все методы, вызываемые из этого метода, подсветятся желтым цветом. Вертикальная длина подсвеченной области показывает время, необходимое для выполнения этого метода. Точное значение времени отображается в строке состояния.
Поместите курсор над любым объектом в
панели, и подробная информация о нем отобразится в строке состояния в нижней части окна.
- С помощью функции Приблизить
можно вызвать курсор, увеличивающий область просмотра.
Примечание: Обновить панель во время наблюдения за приложением можно с помощью кнопки Обновить панели
.
Определение активных нитей
В панели Поток выполнения для каждой нити показываются периоды активности, определяемые по наибольшему количеству вызовов метода. Методы представлены в виде полос: сначала основной, далее - вызываемые из него. Последовательность вызовов методов идет слева направо; благодаря этому и выявляются активные части нити.
Если вы выбираете весь раздел, содержащий последовательность вызовов метода, то в строке состояния будет отображаться время, затраченное на его выполнение. Для расчета времени активности нити следует вычислить разницу между следующими значениями:
- Наведите курсор на верхнюю горизонтальную линию выбранной желтой области. В строке состояния отобразится соответствующее значение времени.
- Точно так же наведите курсор на нижнюю горизонтальную линию выбранной желтой области (охватывающей период выполнения последовательности методов) и посмотрите значение времени для этой точки.
Советы
- Если диаграмма сильно перегружена и трудночитаема, увеличьте
ее.
- При выборе метода все вызываемые из него методы подсветятся желтым цветом.
- Панели в рабочей среде можно переносить с места на место и упорядочивать их при необходимости.
- В строке состояния всегда отображается время, соответствующее точке, в которой находится курсор.
- Сброс отображения в панели осуществляется кнопкой Домой.
Выявление часто вызываемых методов
Определить часто вызываемые методы можно с помощью:
- Инструмента масштаба
, увеличив последовательность вызовов метода.
- Подсчета полос одного цвета в выбранной области. Эти полосы обозначают методы одного экземпляра класса, вызванные несколько раз.
- Оценки длины полос разных цветов (каждый цвет обозначает отдельный метод). Чем длиннее полоса, тем дольше выполняется метод.
Проверка "сбора мусора"
Обычно по полосам в пользовательской нити невозможно предсказать, попадет ли объект под сбор мусора.
Выполните следующие действия:
- По умолчанию нить сбора мусора не отображается. Для того чтобы включить ее, выберите Нити > GC в меню Контекст панели.
- Проверьте крайний левый столбец в этой панели. Этот столбец зарезервирован под нить сбора мусора и называется столбец нити GC.
- Проверьте, есть ли в нем отдельный тонкий прямоугольник. Обычно прямоугольник располагается в самом низу, под всеми вызовами методов объекта. Наличие этого прямоугольника в столбце нити GC говорит о том, что этот объект попал под сбор мусора.
Определение этапов выполнения программы
Определение этапа инициализации
- С помощью инструмента масштаба
увеличьте последовательность вызовов метода вверху главной нити.
- Найдите методы, помеченные как -init-.
- Выберите один из методов. В строке состояния отобразится подсказка о том, что этот метод служит для инициализации (присвоение значений переменным приложения).
Анализ методов с помощью панели Вызов метода
- В панели Монитор профилирования выберите либо монитор, либо агент. Щелкните на нем правой кнопкой, выберите Открыть с помощью> Поток выполнения. Откроется панель потока выполнения.
- Выберите метод, который будете исследовать, щелкните на нем правой кнопкой, затем выберите
Показать вызов метода.
- Область просмотра можно увеличить с помощью функции приближения
. Цвета полос различаются по классам и соединяются горизонтальными линиями, представляющими собой вызовы метода.
- Выберите метод, щелкнув на его имени.
- Нажмите кнопку Обновить панели
и убедитесь, что вы видите самую свежую информацию.
- Обратите внимание на строку:

В этой строке отображается имя метода, за которым идут цифры n/m, где
n - это номер текущего вызова этого метода, а m - общее количество вызовов.
- Кнопки Назад
и
Вперед
позволяют просмотреть все вызовы выбранного метода (или все сообщения для выбранного объекта). Текущий вызов отображается в строке состояния.
Нахождение функции, вызывающей метод
Для выяснения, какая функция вызывает метод, выполните следующие действия, не выходя из панели вызова метода:
- Посмотрите программу, из которой вызывается метод, с помощью кнопки Показать контекст вызова
. Контекст вызова метода отобразится слева от самого метода.
- Для получения более подробных сведений о функции, вызывающей метод, поместите курсор над полосой, представляющей собой эту функцию. Сведения об этой функции отобразятся в строке состояния.
- Посмотрите метод, вызываемый из исследуемого метода, с помощью кнопки Показать вызываемый метод
.
(C) Copyright IBM Corporation 2000, 2006.