domingo, 24 de enero de 2010

Profiling en php con xdebug y kcachegrind en windows

Hace tiempo que no posteo nada y ya tocaba compartir algo interesante.
Llevo un tiempo trabajando en php utilizando la tecnica del profiling de forma habitual.
El profiling facilita mucho las cosas a la hora de analizar el rendimiento de todo tipo de scripts y aplicaciones web, puesto que permite un análisis muy visual y exacto.
Concretamente, hacer profiling en php implica el uso de una extensión de php como xdebug , que permite generar los ficheros de trazas ( o también llamados profiles ), ademas de un programa para analizar de estas trazas, como wincachegrind (windows), webgrind (multiplataforma) o kcachegrind (linux).

En mi caso he utilizado kcachegrind porque es el mas completo de todos en cuanto a la cantidad de diagramas y datos que te puede mostrar. Dado que kcachegrind es un programa de linux, he tenido que buscar una forma de ejecutarlo en windows, y ahi es donde encontre kde4win.

Kde4win permite la instalación en windows un conjunto de aplicaciones de linux preparadas a tal efecto. Y dentro de este conjunto de aplicaciones se encuentra kcachegrind, con funcionalidades que lo hacen muy superior a los demás analizadores como las siguientes:



  • Diagramas en forma de arbol que muestra la jerarquia de las llamadas a funciones que se realizaron.
  • Muestreo de tiempos de ejecucion detallados hasta el microsegundo o en porcentaje respecto el tiempo total de ejecución.
  • Muestreo de un 'mapa de ejecución', esto es un diagrama en el que cada funcion esta representada con un tamaño proporcional al tiempo que tardó.
  • Agrupación o coloracion de los diagramas por nombre del fichero o por clase.
  • Listado de numero de veces que se llamo cada función, con los tiempos propio y de inclusion que tardo en total.
  • Búsqueda, para localizar aquella funcion que queremos saber cuanto tarda, pero que puede no ser facil de encontrar en el arbol de la traza.
  • Navegación facil por los nodos del arbol de ejecución.
Después de haber probado wincachegrind y webgrind, me decidi por el kcachegrind por la gran diferencia de funcionalidades y a pesar de las dificultades de instalación, y de que ahora parece que ya no viene incluido en kde4win ( y no me preguntéis porque, porque no tengo ni idea :S ).
Si deseáis poder hacer profiling en php en windows, solo teneis que hacer lo siguiente:
  1. Descargar e Instalar la extension de xdebug que sea apropiada para vuestra version de php.
  2. Comprobar que se están generando los profiles en la carpeta configurada en php. Tienen que ser ficheros con la extension .kgrind
  3. Descargar este kde4win (200mb) que he preparado, y descomprimirlo en la carpeta c:/KDE4
  4. Instalar graphviz, pues al parecer es necesario en windows para poder generar los gráficos en forma de arbol en kcachegrind.
  5. Hacer dobleclick sobre un fichero de traza y asociarlo a kcachegrind (c:/KDE4/bin/kcachegrind.exe)
Y listos!! A partir de ahora ya podreis ver diagramas de lo que programais en php y reducir esos milisegundos de mas que tanta falta nos hace!!
Para cualquier duda o consulta, ya sabeis! Los comentarios estan para algo :D

No hay comentarios: