Подтвердить что ты не робот

Как мне профилировать мои программы на Perl?

Мне нужно улучшить производительность моего приложения Perl. Как найти медленные точки?


Это вопрос официального официального perlfaq. Мы импортируем perlfaq в Stack Overflow.

4b9b3361

Ответ 1

(Это официальный ответ официального 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.

Ответ 2

Я переключился на использование Devel::NYTProf, который является наилучшим профилированием для Perl, скомпонованным, первоначально людьми в NYTimes.

Ответ 3

Там очень простой способ найти медленные точки, чтобы вы могли улучшить производительность своей программы - случайную паузу.

В принципе, идея, а не мера, чтобы увидеть, какая часть медленная, вы позволяете ее медлительности выставлять ее вам.

Запустите программу с флагом отладки -d, а во время ее запуска прерывайте ее вручную и отобразите стек вызовов (T). Сделайте это несколько раз, например 5 или 10. Посмотрите на любое утверждение, которое появляется в нескольких стеках, и это не является абсолютно необходимым, потому что время, за которое оно отвечает, составляет примерно процент стеков, которые показывают его.

Это находит не только горячие точки, но и линии, функции которых называются дорогостоящими. Он также работает независимо от того, связана ли программа с I/O или CPU, и не имеет значения, что еще происходит в машине.

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