Seite wählen

Perl Profiling mit NYTProf

von | Nov 28, 2013 | Perl, Development

Nachdem sich meine Kollegen bereits eingehend mit PHP Profiling mit KCacheGrind und XDebug sowie GPerfTools am Beispiel von Icinga 2 beschäftigt haben, möchte ich mich heute dem Perl Profiler NYTProf widmen. Profiling von Perl Scripts ist vor allem dann interessant, wenn man eigene Funktionsaufrufe gekapselt hat, und natürlich, um zu erkennen, womit man aktuell am meisten Zeit verbrät, um daraus Optimierungsstrategien zu entwickeln. Vielleicht gibt es ja auch eine besser Library, um Objekte von der Platte in einen Hash einzulesen, oder schnellere Stringoperationen? Oder auch nur das Übliche – alles ist zu langsam, und man möchte gezielt wissen, wer oder was schuld daran ist 😉
Die Installation ist trivial, wahlweise aus Paketen (EL6 benötigt das Repoforge Repository), oder direkt aus CPAN.

# apt-get install libdevel-nytprof-perl
# yum install perl-Devel-NYTProf
# zypper in perl-Devel-NYTProf
# perl -MCPAN -e 'install Devel::NYTProf'

Den Profiler bindet man wie folgt ein

# perl -d:NYTProf my_perl_script.pl

Standardmässig legt NYTProf im aktuellen Verzeichnis eine Datei namens nytprof.out an (falls Prozesse geforkt werden, mit PID als Suffix. Mittels nytprofmerge können mehrere Dateien wieder zusammengefügt werden). Das kann bei längerer Laufzeit schonmal mehrere hundert Megabyte ausspucken, dementsprechend sollte mans auf einem schnellen Device mit viel Platz ausführen.
Nachdem das Perl Script erfolgreich beendet wurde, kann man das Ergebnis mit unterschiedlichen Exportmechanismen visualisieren.
Die schnellste Methode hierbei ist eine generierte HTML Übersicht inkl Flamegraph, Treemap und Übersichtstabellen mit den am meisten aufgerufensten/längsten dauernden Funktionen. nytprofhtml erwartet sich ohne Angabe von –file als Parameter im aktuellen Verzeichnis die vorher erstelle nytprof.out Datei.

$ nytprofhtml
$ chromium nytprof/index.html

NYTProf HTML Output
Alternativ dazu bietet NYTProf seit Version 3 an, die Profiling Datei in ein Callgrind-lesbares Format zu exportieren. Damit ist es möglich, in gewohnter Umgebung mit KCacheGrind zu arbeiten.

$ nytprofcg
$ kcachegrind nytprof.callgrind

Nytprof Callgrind Kcachegrind
Sofern wider Erwarten mal Performanceprobleme auftreten – wir wissen Bescheid, wie man die Ergebnisse interpretiert und die Performance optimiert, fragt uns einfach 🙂

0 Kommentare

Trackbacks/Pingbacks

  1. Profiling your application with Valgrind Callgrind: Icinga2 › NETWAYS Blog - […] for the LConf Backend and other Perl foo here at NETWAYS – I’ve already written about profiling Perl. During…

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Perl | Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...