Учебник: Анализ данных профилирования

Цели и задачи

Данные профилирования процесса Java можно проанализировать с помощью панелей проекции Профилирование и протокол. Эти панели позволяют:

Необходимое время

1 час

Перед тем, как начать

Перед началом изучения этого учебника необходимо:

  1. Установить Eclipse Platform, включая пакеты Test и Performance Tools Platform (TPTP).
  2. Найти файл примеров профилирования (hcframe.jar) для импорта. Файл должен находиться в следующем каталоге:
    каталог-установки-TPTP\eclipse\plugins\org.eclipse.tptp.platform.collection.framework_4.0.0

Описание

В этом учебнике с помощью панелей проекции Профилирование и протокол будет анализироваться пример класса PerformanceExample.class. Пример открывает окно с двумя кнопками.

Вам потребуется выполнить следующее:

  1. Открыть в рабочей среде проекцию Профилирование и протокол
  2. Выполнить профилирование класса PerformanceExample
  3. Проанализировать данные профилирования

Обновить панель во время наблюдения за приложением можно с помощью кнопки Обновить панели  кнопка со значком .

Открытие проекции Профилирование и протокол в рабочей среде

В меню Окно выберите Открыть проекцию > Прочие > Профилирование и протоколы.

Профилирование класса PerformanceExample

Для профилирования класса PerformanceExample выполните следующие действия:

  1. Нажмите кнопку Профилирование кнопка со значком и выберите из выпадающего списка Профилирование. Откроется окно запуска профилирования.
  2. Для создания новой конфигурации дважды щелкните на Внешнем Java-приложении.
  3. Перейдите на вкладку Главная.
  4. В поле Имя класса введите org.eclipse.hyades.test.collection.framework.PerformanceExample.
  5. Нажмите Добавить файл JAR и добавьте архив с этим классом.
  6. Выберитекаталог-установки-TPTP\eclipse\plugins\org.eclipse.tptp.platform.collection.framework_4.0.0\hcframe.jar
  7. Нажмите Открыть. Архив JAR будет добавлен.
  8. Выберите вкладку Монитор. Здесь можно указать критерии профилирования.
  9. На вкладке Монитор разверните раздел Профилирование Java, выберите Простой анализ памяти и включите переключатель рядом с ним. В список собираемых данных добавится информация о памяти.
  10. Выберите пункт Анализ времени выполнения и включите переключатель рядом с ним. Эта опция позволяет анализировать данные о времени с помощью статистических панелей. Для того чтобы получить возможность работать с панелями Поток выполнения и Вызов метода, необходимо собрать графические сведения выполнения. Так как этот пример рассчитан на ознакомление со всеми панелями профилирования, включая Поток выполнения и Вызов метода, при выборе опции Анализ времени выполнения выберите в окне Опции редактирования профилирования Опции редактирования, Показать графические сведения потока выполнения. Кроме того, включите переключатель для опции Собрать граничащие классы, исключенные набором фильтров и установите Глубину граничащего класса 1. Нажмите Готово.
  11. На странице Набор фильтров профилирования можно задать подмножество анализируемых данных. Эта возможность позволяет отфильтровать классы или пакеты, выходящие за рамки анализа.
    Выберите сборщик данных Профилирование Java, затем выберите Опции редактирования. Откроется окно Набор фильтров. Для того чтобы добавить классы или пакеты, для которых необходимо собрать данные, в разделе Содержимое выбранного набора фильтров нажмите Добавить. Откроется окно Добавить фильтр.
  12. Для профилирования этого класса введите org.eclipse.hyades.test.collection.framework.* в поле Класс.
  13. Для того чтобы включить методы только данного примера, в поле Имя метода введите *.
  14. Нажмите кнопку OK. Критерий фильтрации добавится в список данных.
  15. Для исключения остальных классов из списка фильтрации, найдите столбец Правило, щелкните на Включить и замените его на Исключить.
  16. Нажмите Далее для перехода на страницу Ограничения. Эта страница управляет объемом собираемых данных, ограничивая их по времени или количеству вызовов метода. Оставьте значения по умолчанию. Нажмите Готово для завершения операции. В результате внесенные изменения будут учтены.
  17. Перейдите на вкладку Назначение. Для хранения данных этого сеанса могут служить специальные стандартные ресурсы - ProfileProject и Default Monitor.
  18. Нажмите кнопку Выполнить профилирование.
  19. В результате этого действия будут созданы необходимые ресурсы, а в панели Монитор профилирования появится агент и процесс. 
  20. Для того чтобы включить просмотр мониторов, выберите Распределенный макет, как показано на приведенной ниже иллюстрации. Это позволит увидеть монитор, где собраны ваши данные и данные о том компьютере, на котором запущена рабочая среда.

    Монитор профилирования, показывающий иерархию ресурсов и выпадающее меню, в где можно отметить ресурсы, которые нужно скрыть

Анализ данных профилирования

Наблюдение за поведением программы в течение некоторого периода времени

Пронаблюдать за работой приложения можно с помощью панели Поток выполнения и таблицы. В этой панели выполнение всей программы представлено как графически, так и в виде таблицы. В панели потока выполнения время отображается на вертикальной оси. В таблице Поток выполнения, которая открывается под панелью Поток выполнения, показаны все нити, а также методы, вызываемые каждой нитью.

  1. В панели Монитор профилирования выберите ваш монитор, щелкните на нем правой кнопкой мыши и выберите Открыть с помощью > Поток выполнения. Откроется панель потока выполнения.
  2. Щелчком выберите метод для оценки. Все методы, вызываемые из этого метода, подсветятся желтым цветом. Вертикальная длина подсвеченной области показывает время, необходимое для выполнения этого метода. Точное значение времени отображается в строке состояния.

    Панель Поток выполнения с двумя методами

    Поместите курсор над любым объектом в панели, и подробная информация о нем отобразится в строке состояния в нижней части окна.

  3. С помощью функции Приблизить    кнопка со значком можно вызвать курсор, увеличивающий область просмотра. 

Примечание: Обновить панель во время наблюдения за приложением можно с помощью кнопки Обновить панели  кнопка со значком .

Определение активных нитей

В панели Поток выполнения для каждой нити показываются периоды активности, определяемые по наибольшему количеству вызовов метода. Методы представлены в виде полос: сначала основной, далее - вызываемые из него. Последовательность вызовов методов идет слева направо; благодаря этому и выявляются активные части нити.

Если вы выбираете весь раздел, содержащий последовательность вызовов метода, то в строке состояния будет отображаться время, затраченное на его выполнение. Для расчета времени активности нити следует вычислить разницу между следующими значениями:

  1. Наведите курсор на верхнюю горизонтальную линию выбранной желтой области. В строке состояния отобразится соответствующее значение времени.
  2. Точно так же наведите курсор на нижнюю горизонтальную линию выбранной желтой области (охватывающей период выполнения последовательности методов) и посмотрите значение времени для этой точки.

Советы

Выявление часто вызываемых методов

Определить часто вызываемые методы можно с помощью:

  1. Инструмента масштаба  кнопка со значком , увеличив последовательность вызовов метода.
  2. Подсчета полос одного цвета в выбранной области. Эти полосы обозначают методы одного экземпляра класса, вызванные несколько раз.
  3. Оценки длины полос разных цветов (каждый цвет обозначает отдельный метод). Чем длиннее полоса, тем дольше выполняется метод.

Проверка "сбора мусора"

Обычно по полосам в пользовательской нити невозможно предсказать, попадет ли объект под сбор мусора.

Выполните следующие действия:

  1. По умолчанию нить сбора мусора не отображается. Для того чтобы включить ее, выберите Нити > GC в меню Контекст панели.
  2. Проверьте крайний левый столбец в этой панели. Этот столбец зарезервирован под нить сбора мусора и называется столбец нити GC.
  3. Проверьте, есть ли в нем отдельный тонкий прямоугольник. Обычно прямоугольник располагается в самом низу, под всеми вызовами методов объекта. Наличие этого прямоугольника в столбце нити GC говорит о том, что этот объект попал под сбор мусора.

Определение этапов выполнения программы

Определение этапа инициализации

  1. С помощью инструмента масштаба  кнопка со значком увеличьте последовательность вызовов метода вверху главной нити.
  2. Найдите методы, помеченные как -init-.
  3. Выберите один из методов. В строке состояния отобразится подсказка о том, что этот метод служит для инициализации (присвоение значений переменным приложения).

Анализ методов с помощью панели Вызов метода

  1. В панели Монитор профилирования выберите либо монитор, либо агент. Щелкните на нем правой кнопкой, выберите Открыть с помощью> Поток выполнения. Откроется панель потока выполнения.
  2. Выберите метод, который будете исследовать, щелкните на нем правой кнопкой, затем выберите Показать вызов метода.
  3. Область просмотра можно увеличить с помощью функции приближения  кнопка со значком .  Цвета полос различаются по классам и соединяются горизонтальными линиями, представляющими собой вызовы метода.
  4. Выберите метод, щелкнув на его имени. 
  5. Нажмите кнопку Обновить панели  кнопка со значком и убедитесь, что вы видите самую свежую информацию.
  6. Обратите внимание на строку:
    строка состояния с именем метода и цифрами 1/1

    В этой строке отображается имя метода, за которым идут цифры n/m, где n - это номер текущего вызова этого метода, а m - общее количество вызовов.
  7. Кнопки Назад  кнопка со значком и Вперед  кнопка со значком позволяют просмотреть все вызовы выбранного метода (или все сообщения для выбранного объекта). Текущий вызов отображается в строке состояния.

Нахождение функции, вызывающей метод

Для выяснения, какая функция вызывает метод, выполните следующие действия, не выходя из панели вызова метода:

  1. Посмотрите программу, из которой вызывается метод, с помощью кнопки Показать контекст вызова  кнопка со значком. Контекст вызова метода отобразится слева от самого метода.
  2. Для получения более подробных сведений о функции, вызывающей метод, поместите курсор над полосой, представляющей собой эту функцию. Сведения об этой функции отобразятся в строке состояния.
  3. Посмотрите метод, вызываемый из исследуемого метода, с помощью кнопки Показать вызываемый метод  кнопка со значком