Как мне профилировать веб-приложение Perl?

StackOverflow https://stackoverflow.com/questions/136067

  •  02-07-2019
  •  | 
  •  

Вопрос

Я работаю над веб-приложением, использующим Perl, и мне нужно подумать об ускорении некоторых частей приложения.

Я подумал, что начну составлять профили конкретных вызовов для той части, которую хочу исследовать.Я провел некоторый поиск по профилированию кода Perl, но, к сожалению, большая часть того, что я нашел, говорит о том, что мне следует запускать свой код Perl с помощью -d:DProf myapp из командной строки.Меня это не совсем устраивает, поскольку мой код находится в веб-приложении.Я нашел способ заставить профилирование работать с Apache, но, к сожалению, «наиболее часто используемыми» модулями, которые возвращались из профилировщика, были все модули CPAN — Class::xyz и т. д. и т. п. и т. п.Не очень полезно.

Кто-нибудь знает, кроме меня, хороший способ внедрения кода «таймера» в методы, которые я хочу профилировать, чтобы нацеливаться только на эти методы?Я думал о написании тестового сценария и его профилировании, но из-за характера кода, над которым я работаю, это потребует немного больше работы, чем я надеюсь.

Это было полезно?

Решение

Попытался ли ты Разработка::NYTProf (гораздо лучше, чем Devel::DProf), который может работать под Apache?Какой веб-сервер вы используете?Это ванильный CGI-скрипт, mod_perl или что-то еще?

Если вы работаете с базами данных, DBI::Профиль может сравнить ваши запросы, что происходит в другой программе.

Однако настоящая хитрость заключается в том, чтобы организовать код так, чтобы вы могли выполнять весь спектр тестирования и профилирования без необходимости собирать все это в конце, чтобы обнаружить, что что-то работает медленно.В краткосрочной перспективе это не сильно поможет вам в борьбе с пожаром, но не позволит вещам перерасти в пожары в долгосрочной перспективе.Существуют также различные способы подделать среду веб-сервера и так далее, но это другой вопрос.:)

Другие советы

Если вы используете CGI.pm, вы можете передавать аргументы вашему Perl-скрипту в командной строке, и CGI.pm будет интерпретировать их так, как если бы они были переданы в качестве параметров через HTTP.Итак, если вы отлаживаете, например.

http://example.com/scripts/example.pl?action=browse&search=grommet&restrict=blah

тогда вы можете просто позвонить из командной строки, например.

perl -d:NYTProf корень документа/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

Вы можете использовать Контрольный показатель основной модуль с :hireswalllocks вариант, если вы действительно хотите рассчитать время внутри компании.Но на самом деле у вас должна быть возможность профилировать из командной строки.Возможно, вам придется написать тестовые сценарии для эмуляции определенных частей запроса CGI, но DProf можно очень сильно полезно при поиске узких мест в производительности.

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

Я понимаю, что на данный момент уже немного поздно, но это одна из причин, почему его полезно использовать. CGI::Приложение или другая архитектура, в которой веб-приложение представляет собой лишь очень краткий фрагмент веб-кода, который использует набор написанных вами модулей для реализации реальной функциональности.Использование такой конструкции позволяет очень просто профилировать (или просто тестировать) любые модули из командной строки, индивидуально или коллективно, не беспокоясь о веб-аспекте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top