Как мне профилировать свои программы на Perl? - PullRequest
36 голосов
/ 07 декабря 2010

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


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

Ответы [ 3 ]

43 голосов
/ 07 декабря 2010

(Это официальный ответ 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 документы, создающие пользовательский отладчик, если вам нужно создать специальный вид профилировщика. Брайан Д. Фой описывает процесс в The Perl Journal , "Создание отладчика Perl" и "Профилирование в Perl" .

На Perl.com есть две интересные статьи о профилировании: «Профилирование Perl» , Саймон Козенс и «Отладка и Профилирование mod_perl Applications ", от Frank Wiles.

Рэндал Л. Шварц пишет о профилировании в «Ускорение вашего Perl» Программы " для Unix Review и " Профилирование в Template Toolkit через Overriding " для Linux Magazine .

12 голосов
/ 08 декабря 2010

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

3 голосов
/ 07 декабря 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...