Depuración y profiling enDrupal: casos prácticos
xhprof  $ pecl install channel://pecl.php.net/xhprof-0.9.2  $ cd /tmp  $ tar zxvf /tmp/buildd/php5-5.3.3/pear-build-downlo...
xhprof $ su - # cat << EOF > /etc/php5/apache2/xhprof.ini [xhprof] extension=xhprof.so xhprof.output_dir=/tmp/xhprof EOF #...
Xdebug$ su -# apt-get install php5-xdebug vim-nox# cd /tmp# git clone git://github.com/ludovicPelle/vim-xdebug.git# cd vim...
Ejemplo 1: Sleep test  ●   Objetivo: Descubrir problemas por exceso de tiempo de  ejecución  ●   Prueba: Implementar una l...
Ejemplo 2: HTTP Request test  ●   Objetivo: Demostrar que las llamadas a recursos  externos son peligrosas si no se contro...
Ejemplo 3: User list peak mem test  ●   Objetivo: Descubrir problemas por exceso de consumo  de memoria  ●   Prueba: Imple...
Ejemplo 4: taxonomy_get_children memory leak  ●   Objetivo: Descubrir problemas por exceso de consumo  de memoria  ●   Pru...
Ejemplo 5: Ejemplo de depuración con xdebug  ●      Objetivo: Demostrar un ejemplo de uso de xdebug  ●   Prueba: Recorrer ...
¿Quieres formar parte de nuestro equipo?     me.apunto@crononauta.com           http://crononauta.com/            http://a...
Upcoming SlideShare
Loading in …5
×

Depuración y profiling en Drupal: casos prácticos

704 views

Published on

Habitualmente, todas las sesiones que se presentan en congresos web relacionados con la comunidad PHP sobre depuración y profiling, y en concreto sobre las herramientas xdebug y xhprof no suelen ir más allá de las instrucciones de instalación y una presentación vaga de las interfaces de usuario y/o sus modelos de uso.

Con esta charla pretendemos olvidarnos de esos pasos previos, ofrecer a los desarrolladores un conjunto de casos prácticos en los que estas herramientas nos pueden ser no solo útiles, sino imprescindibles para poder depurar el problema en algunos casos incluso en menos de 5 minutos, cuando en otras condiciones o usando otro tipo de herramientas de depuración, podríamos desquiciarnos durante horas sin conseguir aproximar el problema.

El objetivo de la sesión es que todos los asistentes vean xhprof y xdebug como dos herramientas imprescindibles para el desarrollo web, y las tengan no solo instaladas de serie en sus plataformas de desarrollo, sino que sean parte de sus herramientas habituales de trabajo.

Published in: Sports
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
704
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Depuración y profiling en Drupal: casos prácticos

  1. 1. Depuración y profiling enDrupal: casos prácticos
  2. 2. xhprof $ pecl install channel://pecl.php.net/xhprof-0.9.2 $ cd /tmp $ tar zxvf /tmp/buildd/php5-5.3.3/pear-build-download/xhprof-0.9.2.tgz $ cd xhprof-0.9.2/ $ su - $ chown -R root.root . $ cp -ra xhprof-0.9.2/ /usr/share/php $ cp -ra xhprof_lib/ /usr/share/php $ cd extension/ $ phpize $ ./configure $ make && make install
  3. 3. xhprof $ su - # cat << EOF > /etc/php5/apache2/xhprof.ini [xhprof] extension=xhprof.so xhprof.output_dir=/tmp/xhprof EOF # mkdir /tmp/xhprof # chown www-data.www-data /tmp/xhprof # /etc/init.d/apache2 reload
  4. 4. Xdebug$ su -# apt-get install php5-xdebug vim-nox# cd /tmp# git clone git://github.com/ludovicPelle/vim-xdebug.git# cd vim-xdebug/plugin# cp debugger.* /usr/share/vim/vim72/plugin/vdebug$ su -# apt-get install php5-xdebug vim-nox# cd /tmp# git clone https://github.com/joonty/vdebug# cp -ra vdebug/plugin/. /usr/share/vim/vim72/plugin/# cp -ra vdebug/syntax/. /usr/share/vim/vim72/syntax/
  5. 5. Ejemplo 1: Sleep test ● Objetivo: Descubrir problemas por exceso de tiempo de ejecución ● Prueba: Implementar una llamada sleep con el tiempo de espera que necesitemos para emular el comportamiento ● Conclusión: Funciones que tarden mucho tiempo en ser ejecutadas son fácilmente identificables ● Solución: Evitar esperas. Son una fuente de race conditions
  6. 6. Ejemplo 2: HTTP Request test ● Objetivo: Demostrar que las llamadas a recursos externos son peligrosas si no se controlan ● Prueba: Implementar una llamada drupal_http_request contra el callback que definimos antes para demostrarlo ● Conclusión: Las llamadas a servicios externos deben controlarse ● Solución: Controlar los tiempos máximos de respuesta en las llamadas (en curl: CURLOPT_CONNECTTIMEOUT)
  7. 7. Ejemplo 3: User list peak mem test ● Objetivo: Descubrir problemas por exceso de consumo de memoria ● Prueba: Implementar una comprobación user_access en hook_user, con un bucle de lectura de todos los usuarios de la plataforma ● Conclusión: En general las llamadas node_load y/o user_load son peligrosas cuando se ejecutan sobre un listado de nodos y/o usuarios sin límite ● Solución: Evitar las llamadas a user_load / node_load al recorrer nodos / usuarios
  8. 8. Ejemplo 4: taxonomy_get_children memory leak ● Objetivo: Descubrir problemas por exceso de consumo de memoria ● Prueba: Implementar una llamada a taxonomy_get_children pasando como argumento tid=0 con miles de términos de free tags creados ● Conclusión: Hay que controlar todos los casos de uso posibles antes de llamar a taxonomy_get_children ● Solución: Evitar hacer llamadas a taxonomy_get_children usando como parámetro tid = 0
  9. 9. Ejemplo 5: Ejemplo de depuración con xdebug ● Objetivo: Demostrar un ejemplo de uso de xdebug ● Prueba: Recorrer un listado de usuarios y comprobar cómo las condiciones se cumplen para salir del bucle ● Conclusión: Los depuradores también son útiles para los lenguajes interpretados
  10. 10. ¿Quieres formar parte de nuestro equipo? me.apunto@crononauta.com http://crononauta.com/ http://al.quimia.net/Javier Carranzajavier.carranza@crononauta.comtwitter: @trunks

×