Pregunta

Estoy trabajando en una aplicación web que utiliza Perl y necesito buscar la aceleración de partes de la aplicación.

Pensé que comenzaría a perfilar las llamadas particulares para la parte que deseo investigar. He hecho algunas búsquedas en el código Perl de perfiles, pero desafortunadamente, la mayoría de lo que encuentro dice que debo ejecutar mi código Perl con -d: DProf myapp desde la línea de comandos. Eso no funciona para mí ya que mi código está dentro de una aplicación web. Encontré una forma de hacer que el perfilado funcione con apache, pero desafortunadamente, el " más usado " Los módulos que regresaron del generador de perfiles fueron todos los módulos CPAN - Clase :: xyz, etc., etc. No son terriblemente útiles.

¿Alguien sabe de una buena manera además de que yo esté inyectando " temporizador " ¿Código en los métodos que deseo perfilar para apuntar solo estos métodos? Pensé en escribir un script de prueba y crear un perfil de eso, pero debido a la naturaleza del código en el que estoy trabajando, eso requeriría un poco más de trabajo del que espero tener que hacer.

¿Fue útil?

Solución

¿Has probado Devel :: NYTProf (mucho mejor que Devel :: DProf ), que puede funcionar bajo Apache? ¿Qué servidor web estás usando? ¿Es este un script CGI de vainilla, una cosa mod_perl o algo más?

Si estás haciendo cosas de la base de datos, DBI :: Profile puede evalúe sus consultas, que es el trabajo que ocurre en otro programa.

El verdadero truco, sin embargo, es organizar el código para que pueda hacer todo el espectro de pruebas y perfiles sin tener que ponerlo todo junto al final para descubrir que algo es lento. Eso no le ayudará mucho a corto plazo para combatir incendios, pero sí evita que las cosas se conviertan en incendios a largo plazo. También hay varias formas de falsificar el entorno del servidor web, etc., pero esa es una pregunta diferente. :)

Otros consejos

Si está utilizando CGI.pm, puede pasar argumentos a su secuencia de comandos perl en la línea de comandos y CGI.pm los interpretará como si se hubieran pasado como parámetros a través de HTTP. Así que si estás depurando, por ejemplo

http://example.com/scripts/example.pl?action=browse& ; search = grommet & amp; restrict = blah

entonces puedes llamar desde la línea de comando, por ejemplo

perl -d: NYTProf documentroot /scripts/example.pl 'action = browse & amp; search = grommet & amp; restrict = blah'

Puede usar el Benchmark con el < opción fuerte>: hireswallclock si realmente quieres cronometrar las cosas internamente. Pero realmente, deberías poder hacer un perfil desde la línea de comandos. Es posible que tenga que escribir scripts de prueba para emular ciertas partes de una solicitud CGI, pero DProf puede ser extremadamente útil cuando se buscan cuellos de botella en el rendimiento.

En particular, busque dónde está su código llamando al código del módulo CPAN. Es posible que esté haciendo esto en bucles mucho más de lo necesario, por lo que, si bien se invierte tiempo en el módulo CPAN, la corrección del código puede solucionar el problema.

Me doy cuenta de que es un poco tarde para esto en este momento, pero esta es una de las razones por las que es bueno usar CGI :: Application u otra arquitectura en la que la aplicación web es solo un fragmento muy breve de código orientado a la web que utiliza varios módulos que ha escrito para implementar la funcionalidad real. El uso de un diseño de este tipo hace que sea muy sencillo perfilar (o simplemente probar) cualquier módulo desde la línea de comandos, ya sea individual o colectivamente, sin tener que preocuparse por el aspecto web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top