Depuración y profiling en
Drupal: 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-
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
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
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/
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
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)
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
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
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
¿Quieres formar parte de nuestro equipo?
     me.apunto@crononauta.com

           http://crononauta.com/
            http://al.quimia.net/


Javier Carranza
javier.carranza@crononauta.com
twitter: @trunks

Más contenido relacionado

PDF
Cómo diagnosticar problemas de rendimiento en entornos LAMP
PDF
Manual de php con ejercicios
PDF
Variables y Bucles
PDF
Tarea con switch
PDF
Estructuras de Control Repetitivo
PDF
Ejercicio denisse chacaguasay 3_c
PPTX
Php Lenguaje de Paginas Web
Cómo diagnosticar problemas de rendimiento en entornos LAMP
Manual de php con ejercicios
Variables y Bucles
Tarea con switch
Estructuras de Control Repetitivo
Ejercicio denisse chacaguasay 3_c
Php Lenguaje de Paginas Web

La actualidad más candente (20)

DOCX
Jefferson cuenca practica_b#7
PDF
Php Con Postgres
PDF
Presentación appy/pod
PDF
Introducción a PHP - Programador PHP - UGR
ODP
00 introducción a Python
PPTX
Desde el DVR hasta la cocina
PDF
Curso php-my sql-clase-2
DOCX
Informe de bucle for y while copia
ODP
Iniciacion a PHP (I)
DOCX
Usando Netbeans para desarrollos en PHP
PDF
6.Métodos en Java
PPTX
Lenguaje de programacion php
PPT
Curso php y_my_sql
PPTX
Estructuras de decisión o selectivas
PPSX
Instrucciones de control repetitivas
PPTX
PPT
Módulo de PHP
PDF
2.Introducción a las aplicaciones en java
Jefferson cuenca practica_b#7
Php Con Postgres
Presentación appy/pod
Introducción a PHP - Programador PHP - UGR
00 introducción a Python
Desde el DVR hasta la cocina
Curso php-my sql-clase-2
Informe de bucle for y while copia
Iniciacion a PHP (I)
Usando Netbeans para desarrollos en PHP
6.Métodos en Java
Lenguaje de programacion php
Curso php y_my_sql
Estructuras de decisión o selectivas
Instrucciones de control repetitivas
Módulo de PHP
2.Introducción a las aplicaciones en java

Destacado (6)

PDF
Unit & Integration Testing
PDF
PDF
Taller de Migrate 2
PDF
Instaladores Live
PDF
Web 2.0 / Ajax
PDF
Debian Packaging
Unit & Integration Testing
Taller de Migrate 2
Instaladores Live
Web 2.0 / Ajax
Debian Packaging

Similar a Depuración y profiling en Drupal: casos prácticos (20)

PDF
Rendimiento en magento
PPTX
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
PPTX
Conferencia Innovación en Técnicas de Ethical Hacking
PDF
ODP
Taller introduccion symfony2
PDF
Docker y PostgreSQL
PPTX
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
PDF
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
PDF
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
PPTX
Desarrollo web con php
PDF
Backtrack 5 manual traducido
PPTX
POO_8_Conceptos Avanzados de POO-PARTE-2.pptx
PPTX
Pro ft pd
ODP
Viernes Tecnicos DTrace
ODP
Aprendizaje Supervisado con DauroLab
PDF
Semana 6 Módulos en Python Entrega 2
PDF
Openldap
PPTX
Desarrollo web con php unidad 3
PDF
Frontend Tools | Herramientas para Frontends
Rendimiento en magento
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Conferencia Innovación en Técnicas de Ethical Hacking
Taller introduccion symfony2
Docker y PostgreSQL
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Desarrollo web con php
Backtrack 5 manual traducido
POO_8_Conceptos Avanzados de POO-PARTE-2.pptx
Pro ft pd
Viernes Tecnicos DTrace
Aprendizaje Supervisado con DauroLab
Semana 6 Módulos en Python Entrega 2
Openldap
Desarrollo web con php unidad 3
Frontend Tools | Herramientas para Frontends

Último (6)

DOCX
JORNADA 1 LIGA MURO 2025BASQUETBOL1.docx
PDF
TRABAJOS VIERNES 22 DE AGOSTO 25 inh.pdf
PDF
CENTER DRIVE técnicas de conducción real
PDF
reglamento baloncesto base castilla y león 25/26
PPT
Administracion_deportiva_asignacion_7_gtz.ppt
PPTX
Presentación moderna aesthtetic papel rosa_20250820_091341_0000.pptx
JORNADA 1 LIGA MURO 2025BASQUETBOL1.docx
TRABAJOS VIERNES 22 DE AGOSTO 25 inh.pdf
CENTER DRIVE técnicas de conducción real
reglamento baloncesto base castilla y león 25/26
Administracion_deportiva_asignacion_7_gtz.ppt
Presentación moderna aesthtetic papel rosa_20250820_091341_0000.pptx

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

  • 1. Depuración y profiling en Drupal: casos prácticos
  • 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. 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. 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. 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. 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. 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. 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. 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. ¿Quieres formar parte de nuestro equipo? [email protected] http://crononauta.com/ http://al.quimia.net/ Javier Carranza [email protected] twitter: @trunks