Мне нужно улучшить производительность моего приложения Perl. Как найти медленные точки?
Это вопрос официального официального perlfaq. Мы импортируем perlfaq в Stack Overflow.
Мне нужно улучшить производительность моего приложения Perl. Как найти медленные точки?
Это вопрос официального официального perlfaq. Мы импортируем perlfaq в Stack Overflow.
(Это официальный ответ официального perlfaq, минус любые последующие изменения)
В пространстве имен Devel
имеется несколько модулей, которые вы можете использовать для
профилируйте свои программы Perl. Модуль Devel:: DProf поставляется с Perl, и вы можете вызвать его с помощью переключателя -d
:
$ perl -d:DProf program.pl
После запуска вашей программы в DProf
вы получите файл tmon.out
с данными профиля. Чтобы просмотреть данные, вы можете превратить их в
читаемый человеком отчет с помощью программы dprofpp
, которая поставляется с
Devel::DProf
:
$ dprofpp
Вы также можете выполнить профилирование и отчетность за один шаг с помощью -p
переключитесь на dprofpp
:
$ dprofpp -p program.pl
Devel:: NYTProf (New York Times Profiler) выполняет профилирование как профилей, так и подпрограмм. Он доступен из CPAN, и вы также вызываете
он с переключателем -d
:
$ perl -d:NYTProf some_perl.pl
Подобно DProf
, он создает базу данных профиля, которую вы
могут превращаться в отчеты. Команда nytprofhtml
превращает данные в
отчет HTML, похожий на отчет Devel:: Cover:
$ nytprofhtml
CPAN имеет несколько других профилировщиков, которые вы можете вызывать в одном и том же мода. Вы также можете быть заинтересованы в использовании C измерять и сравнивать фрагменты кода.
Вы можете прочитать больше о профилировании в программировании Perl, глава 20, или мастеринг Perl, глава 5.
perldebguts документы, создающие настраиваемый отладчик, если вам нужно создайте специальный профиль профилировщика. brian d foy описывает процесс в журнале Perl, "Создание отладчика Perl" и "Профилирование на Perl" .
Perl.com имеет две интересные статьи по профилированию: "Профилирование Perl" , Саймон Козенс и " Отладка и Профилирование приложений mod_perl ", Frank Wiles.
Рэндал Л. Шварц пишет о профилировании в " Ускорение своего Perl Программы " для Unix Review и " Профилирование в Template Toolkit via Overriding " для журнала Linux.
Я переключился на использование Devel::NYTProf, который является наилучшим профилированием для Perl, скомпонованным, первоначально людьми в NYTimes.
Там очень простой способ найти медленные точки, чтобы вы могли улучшить производительность своей программы - случайную паузу.
В принципе, идея, а не мера, чтобы увидеть, какая часть медленная, вы позволяете ее медлительности выставлять ее вам.
Запустите программу с флагом отладки -d
, а во время ее запуска прерывайте ее вручную и отобразите стек вызовов (T
). Сделайте это несколько раз, например 5 или 10. Посмотрите на любое утверждение, которое появляется в нескольких стеках, и это не является абсолютно необходимым, потому что время, за которое оно отвечает, составляет примерно процент стеков, которые показывают его.
Это находит не только горячие точки, но и линии, функции которых называются дорогостоящими. Он также работает независимо от того, связана ли программа с I/O или CPU, и не имеет значения, что еще происходит в машине.
Вы можете делать это более одного раза, пока вы больше не сможете найти что-либо, что можно ускорить.