debugging und profiling bei forkendem Server

debugging und profiling bei forkendem Server

am 12.10.2007 14:20:10 von Gregor Goldbach

Moin,

ich habe hier einen forkenden Server (Net::Server::Fork), den ich gerne
mit einem Profiler untersuchen möchte. Devel::DProf wirft einen Kern und
andere Profiler von CPAN kommen anscheinend bis zum fork() und geben
weitere Informationen schlicht nicht aus.

Wie kann ich über das fork() hinaus Informationen über das Zeitverhalten
erhalten? Ilyas Beitrag auf perlmonks
(http://www.perlmonks.org/?node_id=128283) scheint nicht zu funktionieren.

(Aus Gründen, die sich meinem Einfluss unterziehen, ist der Wechsel zu
einem nicht-forkenden Server keine Option.)

Danke im Voraus!

--
Gregor Goldbach

Re: debugging und profiling bei forkendem Server

am 12.10.2007 20:14:12 von Slaven Rezic

Gregor Goldbach writes:

> Moin,
>
> ich habe hier einen forkenden Server (Net::Server::Fork), den ich gerne
> mit einem Profiler untersuchen möchte. Devel::DProf wirft einen Kern und
> andere Profiler von CPAN kommen anscheinend bis zum fork() und geben
> weitere Informationen schlicht nicht aus.

Hast du Devel::FastProf versucht? In der Ausgabe von fprofpp sehe ich
jedenfalls Zeilen, die sowohl vom Parent als auch vom Child ausgeführt
wurden.

>
> Wie kann ich über das fork() hinaus Informationen über das Zeitverhalten
> erhalten? Ilyas Beitrag auf perlmonks
> (http://www.perlmonks.org/?node_id=128283) scheint nicht zu funktionieren.
>
> (Aus Gründen, die sich meinem Einfluss unterziehen, ist der Wechsel zu
> einem nicht-forkenden Server keine Option.)
>

Grundsätzlich wäre vielleicht auch eine Option, strace/ktrace/truss zu
verwenden.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net

Re: debugging und profiling bei forkendem Server

am 15.10.2007 11:09:57 von Gregor Goldbach

Am Fri, 12 Oct 2007 20:14:12 +0200 schrieb Slaven Rezic:

>> ich habe hier einen forkenden Server (Net::Server::Fork), den ich gerne
>> mit einem Profiler untersuchen möchte. Devel::DProf wirft einen Kern und
>> andere Profiler von CPAN kommen anscheinend bis zum fork() und geben
>> weitere Informationen schlicht nicht aus.
>
> Hast du Devel::FastProf versucht? In der Ausgabe von fprofpp sehe ich
> jedenfalls Zeilen, die sowohl vom Parent als auch vom Child ausgeführt
> wurden.

Nein, den kannte ich noch nicht. Hm... in der Anleitung wird explizit
erwähnt, dass er fork()en kann. Wenn er jetzt noch funktionsorientiert
wäre... mal gucken, was man da alles umbiegen muss, damit er nicht
zeilenorientiert arbeitet.

Danke!

>> Wie kann ich über das fork() hinaus Informationen über das Zeitverhalten
>> erhalten? Ilyas Beitrag auf perlmonks
>> (http://www.perlmonks.org/?node_id=128283) scheint nicht zu funktionieren.
>>
>> (Aus Gründen, die sich meinem Einfluss unterziehen, ist der Wechsel zu
>> einem nicht-forkenden Server keine Option.)
>>
>
> Grundsätzlich wäre vielleicht auch eine Option, strace/ktrace/truss zu
> verwenden.

Ich weiß nicht so recht. valgrind behauptet, dass ganz viel Zeit in
malloc() verbraten wird. Ob das strace so viel anderes ergeben? :-)

Ich suche zunächst auf möglichst hoher Ebene nach dem Flaschenhals...

--
Gregor Goldbach

Re: debugging und profiling bei forkendem Server

am 15.10.2007 23:31:44 von Slaven Rezic

Gregor Goldbach writes:

> Am Fri, 12 Oct 2007 20:14:12 +0200 schrieb Slaven Rezic:
>
[...]
>
> >> Wie kann ich über das fork() hinaus Informationen über das Zeitverhalten
> >> erhalten? Ilyas Beitrag auf perlmonks
> >> (http://www.perlmonks.org/?node_id=128283) scheint nicht zu funktionieren.
> >>
> >> (Aus Gründen, die sich meinem Einfluss unterziehen, ist der Wechsel zu
> >> einem nicht-forkenden Server keine Option.)
> >>
> >
> > Grundsätzlich wäre vielleicht auch eine Option, strace/ktrace/truss zu
> > verwenden.
>
> Ich weiß nicht so recht. valgrind behauptet, dass ganz viel Zeit in
> malloc() verbraten wird. Ob das strace so viel anderes ergeben? :-)

Kennt den valgrind überhaupt etwas anderes außer malloc und free? :-)

>
> Ich suche zunächst auf möglichst hoher Ebene nach dem Flaschenhals...
>

Mit strace kann man recht gut sehen, ob z.B. IO langsam ist.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

sf-upload: make batch releases on SourceForge
http://sf-upload.sf.net

[SOLVED] debugging und profiling bei forkendem Server

am 16.10.2007 12:08:23 von Gregor Goldbach

Am Mon, 15 Oct 2007 23:31:44 +0200 schrieb Slaven Rezic:

>> >> Wie kann ich über das fork() hinaus Informationen über das Zeitverhalten
>> >> erhalten?

Ich habe Devel::Profile genommen, da ich eine funktionsorientierte Ausgabe
brauche. Darin habe ich zwei Zeilen geändert:

- nicht abbrechen, wenn sich der Profiler nicht im Elternprozess befindet
- Name der Ausgabedatei um Prozesskennung erweitern

Somit habe ich jetzt einen Profiler, der mir die gewünschte Ausgabe in
eine Datei pro Prozess schreibt. Für meine Anwendung reicht das.

>> > Grundsätzlich wäre vielleicht auch eine Option, strace/ktrace/truss zu
>> > verwenden.
>>
>> Ich weiß nicht so recht. valgrind behauptet, dass ganz viel Zeit in
>> malloc() verbraten wird. Ob das strace so viel anderes ergeben? :-)
>
> Kennt den valgrind überhaupt etwas anderes außer malloc und free? :-)

Sei nicht so garstig! >;-)

>> Ich suche zunächst auf möglichst hoher Ebene nach dem Flaschenhals...
>
> Mit strace kann man recht gut sehen, ob z.B. IO langsam ist.

In der Tat sehe ich das auch mit meiner Lösung ganz deutlich. Und ich
habe dabei nur einen Tag verbraten. Dafür weiß ich nun aber auch viel
mehr über den Perl-Debugger-Interna :-)

--
Gregor Goldbach