2013-02-25 9 views
5

Zuerst ich export PERL5OPT=-d:NYTProf von der Befehlszeile, so dass meine Debugging-Option von Kind-Prozesse geerbt wird. Dann starte ich mein Perl-Programm contactd. Es verzweigt sich in einen Daemon-Prozess und führt fork/execs neun Instanzen eines anderen Perl-Programms aus, table_manager. (Die Exec sieht etwa wie exec /path/to/perl /path/to/table_manager aus.) An diesem Punkt kann ich 10 oder 11 neue Dateien mit dem Namen nytprof.out sehen. nnnn; eine für jeden Prozess, der bis jetzt wie erwartet gespalten wurde.Verwenden von Devel :: NYTProf auf Programm, das fork/execs

Clients stellen eine Verbindung zu contactd die Gabel/execs Slave, die wiederum zu den neun Tabelle Manager verbindet und nimmt Anfragen vom Client und übergibt sie an den neun Tabelle Manager.

Nach dem Ausführen einer typischen Clientverbindung habe ich alle Serverprozesse heruntergefahren. Ich laufe nytprofmerge, um die verschiedenen nytprof.out zusammenzuführen. nnnn Dateien in nytprof-fusion.out, und dann nytprofhtml -f nytprof-merged.out --open ausführen.

Wenn der HTML-Bericht geöffnet wird, sehe ich nichts anderes als kontaktiert. Die oberen Subroutinen sind meist BEGIN Blöcke, importieren, AUTOLOAD ... frühen Ausführung Zeug.

Dies führt mich, dass NYTProf zu denken ist über eine Gabel gehen (basierend auf den mehreren nytprof.out Dateien), aber aus irgendeinem Grunde weiterhin nicht den exec ‚zum Profil ed Perl-Programme.

Ich laufe Perl 5.16.1 und die neueste Devel :: NYTProf, in MacOSX 10.8.2.

Irgendwelche Vorschläge, was ich nicht getan habe?

Antwort

3

könnten Sie setzen Gabel Tiefe Variable auf -1:

http://search.cpan.org/~timb/Devel-NYTProf-4.25/lib/Devel/NYTProf.pm#forkdepth=N

forkdepth = N

Wenn ein Perl-Prozess, der profiliert wird, um eine Gabel() ausführt das Kind Prozess auch profiliert. Mit der Option forkdepth kann dies gesteuert werden. Wenn forkdepth null ist, wird die Profilerstellung im untergeordneten Prozess deaktiviert.

Wenn forkdepth größer als null ist, wird die Profilerstellung in dem untergeordneten Prozess aktiviert, und der forkdepth-Wert in diesem Prozess wird um eins verringert ( ).

Wenn forkdepth -1 (der Standardwert) ist, gibt es keine Begrenzung für die Anzahl von Generationen von untergeordneten Elementen, die profiliert sind.

Grüße,

+0

Ich musste dies bei der Arbeit versuchen, auf einem anderen Betriebssystem (CentOS), und es gibt einige Unterschiede. Ich musste die Option * addpid = 1 * explizit angeben, damit NYTPROF pid an die .out-Dateien anfügt. (Dies schien automatisch in meiner OSX-Umgebung zu geschehen.) Und ich habe alles, was ich wollte, ohne Angabe von forkdepth = -1 (was sowieso der Standardwert ist). Also werde ich das heute Abend auf OSX versuchen und sehen, ob die Angabe von addpid die Antwort ist oder ob forkdepth etwas bewirkt. – Chap

0

AFAIU Sie einen ersten nytprof.out zu fusionieren vergessen. Sie könnten es zusammenführen, oder Sie können addpid = 1 Option übergeben, um immer nytprof.out.nnnn auch für den ersten Eintrag zu bekommen.