Zeit ist Geld oder Profiling Perl

Von | 29. Oktober 2008

Nachdem ich hier ca. 800.000 eMails innerhalb kürzester Zeit verschicken muss zählt jede Sekunde. Mein Programm ist ein kleiner Daemon in Perl. Ich habe es so geschrieben, dass es parallel mehrmals laufen kann (auch auf verschiedenen Systemen). Trotzdem aber kommt mir das Skript immer noch zu langsam vor. Daher habe ich mal wieder mit Profiling beschäftigt. Den Perl Profiler habe ich mit
perl -d:DProf dispatcher.pl
Anschließend liegt das Ergebnis im Verzeichnis als tmon.out. Das wiederum bekommt man ganz einfach über das Programm dprofpp ausgewertet. Raus kommt im dem aktuellen Beispiel sowas wie:

 
[root@mail1 dispatcher]# dprofpp 
Total Elapsed Time = 44.00120 Seconds
  User+System Time = 1.721205 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 22.3   0.384  0.408   5824   0.0001 0.0001  Net::Cmd::datasend
 12.7   0.219  0.219   2941   0.0001 0.0001  Net::Cmd::getline
 11.3   0.195  0.227   2189   0.0001 0.0001  Net::Cmd::command
 8.95   0.154  0.231    730   0.0002 0.0003  Sys::Syslog::syslog
 6.80   0.117  0.117    963   0.0001 0.0001  DBI::st::fetch
 5.64   0.097  1.360    728   0.0001 0.0019  main::send_email
 5.23   0.090  0.232    728   0.0001 0.0003  Net::Cmd::dataend
 3.60   0.062  0.062  10957   0.0000 0.0000  Net::Cmd::debug
 2.85   0.049  0.049    249   0.0002 0.0002  DBI::st::execute
 2.44   0.042  0.156    728   0.0001 0.0002  Net::SMTP::recipient
 2.32   0.040  0.153    963   0.0000 0.0002  DBI::st::fetchrow_hashref
 2.21   0.038  0.034    240   0.0002 0.0001  main::timetable
 1.74   0.030  0.039      8   0.0037 0.0049  Net::SMTP::BEGIN
 1.68   0.029  0.127      8   0.0037 0.0158  main::BEGIN
 1.68   0.029  0.288   2920   0.0000 0.0001  Net::Cmd::response

D.h. also, dass das Programm am meisten Zeit mit der Kommunikation mit dem SMTP Server verbraucht. Mal sehen ob ich da was optimieren kann.

3 Gedanken zu „Zeit ist Geld oder Profiling Perl

  1. Pingback: Zeit ist Geld oder Profiling Perl - Teil 2 | Gerds Blog

  2. Renée Bäcker

    Hallo,

    Devel::DProf ist nicht unbedingt zu empfehlen. In dem Modul gibt es ein paar Bugs und die Ausgaben sind nicht immer 100%ig verlässlich. Stattdessen würde ich den – im Kommentar genannten – Profiler Devel::NYTProf empfehlen. Das ist verlässlich und wird aktiv weiterentwickelt.

    Viele Grüße,
    Renée Bäcker

    Antworten

Schreibe einen Kommentar

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