2010-12-06 9 views

Respuesta

37

(Este es el official perlfaq answer, menos las ediciones posteriores)

El espacio de nombres Devel tiene varios módulos que se pueden utilizar para perfil de sus programas de Perl. El módulo Devel::DProf viene con Perl y se puede invocar con el interruptor -d:

$ perl -d:DProf program.pl 

Después de ejecutar su programa bajo DProf, obtendrá un tmon.out archivo con los datos del perfil. Para mirar los datos, puede convertirlo en un informe legible con el programa dprofpp que viene con Devel::DProf:

$ dprofpp 

También se puede hacer la descripción del perfil y presentación de informes en un solo paso con el -p interruptor de a dprofpp:

$ dprofpp -p program.pl 

El Devel::NYTProf (New York Times Profiler) hace las dos cosas declaración y perfiles subrutina. Está disponible en CPAN y también se invocan con el interruptor -d:

$ perl -d:NYTProf some_perl.pl 

Como DProf, se crea una base de datos de la información de perfil que puede convertir en informes. El comando nytprofhtml convierte los datos en un informe HTML similar al informe Devel::Cover:

$ nytprofhtml 

CPAN tiene varios otros perfiladores importantes que pueden ejecutarse en el mismo moda. También podría estar interesado en usar la medida C a y comparar fragmentos de código.

Puede leer más sobre perfiles en de programación Perl, capítulo 20, o Mastering Perl, capítulo 5.

perldebguts documentos que crean un depurador a medida, si es necesario crear un tipo especial de perfilador . brian d foy describe el proceso en The Perl Journal, "Creating a Perl Debugger" y "Profiling in Perl".

Perl.com tiene dos artículos interesantes sobre perfiles: "Profiling Perl", por Simon Cozens, y "Debugging and Profiling mod_perl Applications", por Frank Wiles.

Randal L.Schwartz escribe sobre el perfilado en "Speeding up Your Perl Programs" para Unix Review y "Profiling in Template Toolkit via Overriding" para Linux Magazine.

3

Hay una forma muy simple de encontrar los puntos lentos para que pueda mejorar el rendimiento de su programa - random-pausing.

Básicamente, la idea es, en lugar de medir para ver qué parte es lenta, dejas que su lentitud te la exponga.

Ejecute el programa con el indicador de depuración -d, y mientras se está ejecutando, interrúmpalo manualmente y muestre la pila de llamadas (T). Haga esto unas cuantas veces, como 5 o 10. Busque cualquier afirmación que aparezca en más de una pila y que no sea estrictamente necesaria, porque el tiempo del cual es responsable es aproximadamente el porcentaje de las pilas que lo muestran.

Esto no solo detecta zonas activas, sino también líneas donde las funciones se llaman costosas. Funciona igual de bien si el programa está vinculado a E/S o CPU, y no importa qué más esté sucediendo en la máquina.

Puede hacerlo más de una vez, hasta que ya no pueda encontrar nada que se pueda acelerar.

+1

Aunque reconozco que esta técnica funcionará, es muy eficiente, propensa a errores, escalas de bases de códigos deficientes a grandes, y no ayudará a determinar si un cambio realmente ayuda a su programa o simplemente cambia los cuellos de botella. Por menos esfuerzo, una ejecución real del perfil expondrá muchos más detalles y será más reproducible. –

+2

@ Ven'Tatsu: ¿Es eso lo que sabes, o lo que querrías pensar? De hecho, es bastante eficiente, no propenso a errores, funciona mejor con bases de código más grandes, encuentra "cuellos de botella" reales, le proporciona los detalles correctos y es tan reproducible como sea necesario. [Aquí hay más sobre el tema.] (Http://stackoverflow.com/questions/4387895/if-profiler-is-not-the-answer-what-other-choices-do-we-have/4390868#4390868) –

+0

Dudo que esto funcione tan bien con los programas de Perl. Al menos no tan bien como lo haría con C, por ejemplo. Además de ejecutar con [Devel :: NYTProf] (http://search.cpan.org/perldoc/Devel::NYTProf) 'perl -d: NYTProf some_perl.pl' genera muy buenas páginas html que son fáciles de revisar. –

9

He cambiado al uso de Devel::NYTProf, que es el mejor perfil para Perl combinado, inicialmente por la gente en el NYTimes.

+3

¡Gracias, Randall! (Sé que esta es una publicación anterior. La perdí inicialmente). Tim Bunce lo ha estado manteniendo por un tiempo. –

Cuestiones relacionadas