2010-12-06 10 views

Antwort

37

(Dies ist die official perlfaq answer, abzüglich aller nachfolgenden Änderungen)

Der Devel Namespace verfügt über mehrere Module, die Sie Profil Ihre Perl-Programme verwenden können. Das Devel::DProf Modul kommt mit Perl und Sie können es aufrufen mit dem -d Schalter:

$ perl -d:DProf program.pl 

nach dem Programm unter DProf ausgeführt wird, werden Sie ein tmon.out Datei mit der Profildaten erhalten. Um Blick auf die Daten, können Sie es sich in eine Menschen lesbaren Bericht mit dem dprofpp Programm, das mit kommt Devel::DProf:

$ dprofpp 

können Sie tun auch die Profilierung und die Berichterstattung in einem Schritt mit dem -p Schalter dprofpp zu:

$ dprofpp -p program.pl 

The Devel::NYTProf (New York Times Profiler) funktioniert sowohl Anweisung und Subroutinen-Profilierung. Es ist erhältlich von CPAN und Sie auch es mit dem -d Schalter aufrufen:

$ perl -d:NYTProf some_perl.pl 

Wie DProf, es erstellt eine Datenbank der Profilinformationen, die Sie in Berichte verwandeln. Der nytprofhtml Befehl schaltet die Daten in einen HTML-Bericht ähnlich dem Devel::Cover Bericht:

$ nytprofhtml 

CPAN hat mehrere andere Profilern, die Sie in der gleichen Art und Weise aufrufen kann. Sie könnten auch daran interessiert sein, die C zu Code-Schnipsel zu messen und zu vergleichen.

Sie können mehr über Profilierung in Programmierung lesen Perl, Kapitel 20, oder Mastering Perl, Kapitel 5.

perldebguts Dokumente einen benutzerdefinierten Debugger zu schaffen, wenn Sie benötigen eine spezielle Art von Profiler erstellen . brian d foy beschreibt den Prozess in Das Perl Journal, "Creating a Perl Debugger" und "Profiling in Perl".

Perl.com hat zwei interessante Artikel über Profiling: "Profiling Perl", von Simon Cozens, und "Debugging and Profiling mod_perl Applications", von Frank Wiles.

Randal L.Schwartz schreibt über Profiling in "Speeding up Your Perl Programs" für Unix Review und für Linux Magazine.

3

Es gibt eine sehr einfache Möglichkeit, die langsamen Stellen zu finden, so dass Sie die Leistung Ihres Programms verbessern können - random-pausing.

Grundsätzlich ist die Idee, anstatt zu messen, welcher Teil langsam ist, lassen Sie seine Langsamkeit es Ihnen aussetzen.

Führen Sie das Programm mit dem Debug-Flag -d aus, und während es ausgeführt wird, unterbrechen Sie es manuell und zeigen Sie den Aufruf-Stapel (T) an. Tun Sie dies ein paar Mal, wie 5 oder 10. Suchen Sie nach einer Aussage, die auf mehr als einem Stapel und erscheint, was nicht unbedingt notwendig ist, weil die Zeit, für die es verantwortlich ist, ungefähr der Prozentsatz der Stapel ist, die es zeigen.

Dies findet nicht nur Hotspots, sondern Linien, in denen Funktionen teuer aufgerufen werden. Es funktioniert genauso gut, ob das Programm I/O- oder CPU-gebunden ist, und es spielt keine Rolle, was sonst noch in der Maschine vor sich geht.

Sie können es mehr als einmal tun, bis Sie nichts mehr finden, was beschleunigt werden kann.

+1

Während ich anerkenne diese Technik wird funktionieren, ist es sehr effizient, fehleranfällig, skaliert schlecht zu großen Code-Basen, und es wird Ihnen nicht helfen, festzustellen, ob eine Änderung wirklich hilft Ihr Programm oder Verschiebungen Engpässe herum. Für weniger Aufwand wird ein echter Profillauf viel mehr Details aufzeigen und wird wahrscheinlich reproduzierbarer sein. –

+2

@ Ven'Tatsu: Ist das was du weißt, oder was du vielleicht denken möchtest? In der Tat ist es ziemlich effizient, nicht fehleranfällig, funktioniert besser mit größeren Code-Basen, findet echte "Engpässe", gibt Ihnen genau die richtigen Details und ist so reproduzierbar wie nötig. [Hier ist mehr zum Thema.] (Http://stackoverflow.com/questions/4387895/if-profiler-is-not-the-answer-what-other-choices-do-we-have/4390868#4390868) –

+0

Ich bezweifle, dass dies mit Perl-Programmen so gut funktioniert. Zumindest nicht so gut wie bei C zum Beispiel. Neben dem Ausführen mit [Devel :: NYTProf] (http://search.cpan.org/perldoc/Devel::NYTProf) erzeugt 'perl -d: NYTProf some_perl.pl' sehr schöne HTML-Seiten, die leicht zu durchschauen sind. –

9

Ich bin zu Devel::NYTProf übergegangen, das ist das beste Profiling für Perl kombiniert, zuerst von den Leuten bei den NYTimes.

+3

Danke Randall! (Ich weiß, das ist ein alter Post .. Verpasste es anfangs). Tim Bunce hat es für eine Weile aufrechterhalten. –

Verwandte Themen