Имя
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/.