2008-09-25 2 views
15

나는 Perl을 사용하는 웹 응용 프로그램에서 작업 중이므로 응용 프로그램의 속도를 높여야합니다.Perl 웹 앱을 프로파일 링하려면 어떻게해야합니까?

내가 조사하고 싶은 부분에 대한 특정 호출을 프로파일 링하기 시작할 것이라고 생각했습니다. 필자는 Perl 코드 프로파일 링에 대한 검색을 해왔지만 불행히도 내가 찾은 대부분은 명령 행에서 -d:DProf myapp으로 내 perl 코드를 실행해야한다고 말합니다. 내 코드가 웹 앱 내에 있기 때문에 그건 저에게 효과적이지 않습니다. 프로파일 링을 아파치와 함께 작동시키는 방법을 찾았지만, 안타깝게도 프로파일 러에서 돌아온 "가장 많이 사용되는"모듈은 모두 CPAN 모듈 (클래스 :: xyz 등)이었습니다.별로 도움이되지 않았습니다.

누군가가 "타이머"코드를 주입하는 것 외에 좋은 방법을 알고 있는데,이 방법을 목표로 삼아 프로필을 작성하고 싶습니까? 필자는 테스트 스크립트 작성 및 프로파일 링을 생각했지만, 필자가 작업하고있는 코드의 성질 때문에 필자는해야 할 일보다 조금 더 많은 작업이 필요할 것이다.

답변

18

Apache에서 작동 할 수있는 Devel::NYTProf (Devel :: DProf보다 훨씬 뛰어나다)을 시도 했습니까? 어떤 웹 서버를 사용하고 있습니까? 이것은 바닐라 CGI 스크립트, mod_perl 것 또는 다른 것입니까?

데이터베이스 작업을 수행하는 경우 DBI::Profile은 다른 프로그램에서 발생하는 작업을 벤치마킹 할 수 있습니다.

그러나 진짜 속임수는 코드를 체계화하여 끝까지 모두 넣지 않고도 테스트 및 프로파일 링의 전체 스펙트럼을 수행하여 느린 것을 발견하는 것입니다. 단기간에 화재에 대처하는 데 많은 도움이되지는 않지만 장기적으로 화재가 발생하는 것을 방지합니다. 웹 서버 환경을 가짜로 만드는 여러 가지 방법이 있지만 그와는 다른 질문입니다. :)

+0

그래, 그게 내가 시도한 것이고, 모든 것이 cpan 모듈이다.나는이 특정한 방법을 실제로 목표로 삼고 그들 자신이 어디에서 대부분 시간을 보는지 알고 싶다. – Leanan

+1

어떤 CPAN 모듈이 나열 되었습니까? 많은 데이터베이스 호출을 수행하고 있다면 DBI 및 DBD 모듈이 목록 상단에있을 가능성이 큽니다. 이것은 Perl이 너무 많은 작업을하고 있기 때문에가 아니라 DB 쿼리가 느리기 때문입니다. 대신 프로파일 링을 시작하십시오. – mpeters

+1

어떻게 코드를 구성하는지 설명하지 않거나이를 수행하는 방법을 설명하는 방법을 설명하지 않는 경우 누군가에게 '코드 구성'에 대해 조언 할 시점이 없습니다. – jwg

1

실제로 내부적으로 시간을 지정하려는 경우 : hireswallclock 옵션을 사용하여 Benchmark 코어 모듈을 사용할 수 있습니다. 하지만 실제로 명령 줄에서 프로파일 링 할 수 있어야합니다. CGI 요청의 특정 부분을 에뮬레이트하기 위해 테스트 스크립트를 작성해야하지만, DProf는 일 수 있으며 성능 병목 현상을 찾을 때 매우 유용합니다 ().

특히 코드가 CPAN 모듈 코드를 호출하는 곳을 찾으십시오. 필요할 때보 다 훨씬 많은 루프에서이를 수행 할 수 있으므로 CPAN 모듈에서 시간이 소비되는 동안 코드를 리팩토링하면 문제를 해결할 수 있습니다.

10

CGI.pm을 사용하는 경우 명령 줄에서 펄 스크립트에 인수를 전달할 수 있으며 CGI.pm은 HTTP를 통해 매개 변수로 전달 된 것처럼 해석합니다. 디버깅 중이라면

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

다음은 명령 줄 예에서 호출 할 수

perl -d:NYTProf documentroot/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

1

내가이 시점에서 늦게에 대한 약간의 실현,하지만 그것은 CGI::Application를 사용하는 것이 좋은 이유 또는 웹 응용 프로그램은 단지 웹의 아주 짧은 비트 인 다른 아키텍처 중 하나입니다 실제 기능을 구현하기 위해 작성한 많은 모듈을 사용하는 코드 작성하기. 이러한 디자인을 사용하면 웹 측면에 대해 걱정할 필요없이 개별적으로 또는 전체적으로 명령 줄에서 모든 모듈을 프로파일 링 (또는 간단히 테스트)하는 것이 매우 간단합니다.

관련 문제