Author image Dmitry E. Oboukhov

Имя

AProf - профайлер для периодически запускаемых процессов

Использование

 use AProf;
 
 use AProf logfile => '/path/to/logfile';
 
 use AProf logfile => '/path/to/logfile', 
            recursive => 1;
 
 use AProf logfile => 'STDOUT';
 
 use AProf logfile => 'NULL';
 
 my $report = AProf::full_log();

Описание работы

Данный модуль предназначен для снятия статистики с периодически запускаемых perl-программ, для которых сложно организовать множество тестовых запусков.

Для использования данного профайлера достаточно включить в исследуемые модули директиву:

 use AProf;

Модуль расчитает время выполнения каждой функции исследуемого модуля и после завершения работы выдаст отчет в logfile. Если logfile не установлен, то используется STDERR.

В качестве logfile могут использоваться следующие варианты:

STDOUT или STDERR

Выдавать отчет в STDOUT или STDERR (последний вариант используется по умолчанию).

NULL

Не выдавать отчет никуда (аналогично /dev/null).

имя файла

Дописывать отчет в файл с указанным именем (основное применение).

Можно записывать отчет самостоятельно (например если хочется хранить его в базе данных, а не в файле). В этом случае установите в logfile значение 'NULL', а отчет получайте при помощи вызова функции:

 my $report = AProf::full_log();

Примечание: По умолчанию AProf контроллирует время выполнения функций входящих в тот модуль в который он подключен. Другие подключенные модули не контроллируются. Другие профайлеры обычно позволяют контроллировать и их. Для того чтобы заставить AProf контроллировать все подключенные модули, используйте опцию recursive => 1 как показано в примерах выше.

Примечание: Помните, что при рекурсивном контроле перехват некоторых функций затруднен или невозможен. Например имеются некоторые проблемы при установке хуков на функции AUTOLOAD итп. Список модулей и функций исключенных из контроля Вы можете найти в начале файла AProf.pm в массивах SKIP_MODULES и SKIP_FUNCTIONS.

Формат профайла

При первой записи в файл (новый файл отчета), а так же при вызове функции AProf::full_log в самом начале выдается две строки заголовка, в котором описано какие поля репорта что означают. Выдача информации идет в несколько столбиков:

Function

Имя функции, которая была под контролем профайлера.

calls

Количество вызовов функции за все время работы.

average

Среднее время требуемое на однократное выполнение функции.

max

Максимальное время за которое выполнилась данная функция.

min

Минимальное время за которое выполнилась данная функция.

Перед записью очередной порции данных, в лог вставляется временная метка вида '** Profiled at 2008-12-10 12:32:37 **', парсер логов может использовать такие метки для постороения графиков времени выполнения функции в зависимости от текущего времени, времени суток итп.

При записи отчета в лог не производится запись о функциях не вызванных за время работы профайлера ни разу. Однако функция AProf::full_log включает в отчет все контроллируемые функции.

Парсинг логов.

Для парсинга логов и получения сводной информации от профайлера используйте модуль AProf::EasyParser. Например:

 perl -MAProf::EasyParser -e 'print aprof_report("filename.log")'

Копирайт

Copyright (С) Dmitry E. Oboukhov mailto:<unera@debian.org>

Лицензия

Профайлер распространяется на условиях лицензии GPL версии 3 (или выше). Подробности см в http://www.gnu.org/licenses/.