SlideShare una empresa de Scribd logo

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

Javier Carranza
Javier Carranza
Javier CarranzaDrupal Ninja, Sysadmin, Entrepreneur, Debian developer

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.

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

1 de 10
Descargar para leer sin conexión
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)

Recomendados

Más contenido relacionado

La actualidad más candente (20)

Jefferson cuenca practica_b#7
Jefferson cuenca practica_b#7Jefferson cuenca practica_b#7
Jefferson cuenca practica_b#7
 
Php Con Postgres
Php Con PostgresPhp Con Postgres
Php Con Postgres
 
Manual PHP 7
Manual PHP 7Manual PHP 7
Manual PHP 7
 
FUNCIONES EN PHP
FUNCIONES EN PHPFUNCIONES EN PHP
FUNCIONES EN PHP
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a Python
 
Desde el DVR hasta la cocina
Desde el DVR hasta la cocinaDesde el DVR hasta la cocina
Desde el DVR hasta la cocina
 
Curso php-my sql-clase-2
Curso php-my sql-clase-2Curso php-my sql-clase-2
Curso php-my sql-clase-2
 
Informe de bucle for y while copia
Informe de bucle for y while   copiaInforme de bucle for y while   copia
Informe de bucle for y while copia
 
Iniciacion a PHP (I)
Iniciacion a PHP (I)Iniciacion a PHP (I)
Iniciacion a PHP (I)
 
Usando Netbeans para desarrollos en PHP
Usando Netbeans para desarrollos en PHPUsando Netbeans para desarrollos en PHP
Usando Netbeans para desarrollos en PHP
 
6.Métodos en Java
6.Métodos en Java6.Métodos en Java
6.Métodos en Java
 
Lenguaje de programacion php
Lenguaje de programacion   phpLenguaje de programacion   php
Lenguaje de programacion php
 
Curso php y_my_sql
Curso php y_my_sqlCurso php y_my_sql
Curso php y_my_sql
 
Estructuras de decisión o selectivas
Estructuras de decisión o selectivasEstructuras de decisión o selectivas
Estructuras de decisión o selectivas
 
Instrucciones de control repetitivas
Instrucciones de control repetitivasInstrucciones de control repetitivas
Instrucciones de control repetitivas
 
Lenguaj script
Lenguaj scriptLenguaj script
Lenguaj script
 
Módulo de PHP
Módulo de PHPMódulo de PHP
Módulo de PHP
 
2.Introducción a las aplicaciones en java
2.Introducción a las aplicaciones en java2.Introducción a las aplicaciones en java
2.Introducción a las aplicaciones en java
 

Destacado (6)

Unit & Integration Testing
Unit & Integration TestingUnit & Integration Testing
Unit & Integration Testing
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Taller de Migrate 2
Taller de Migrate 2Taller de Migrate 2
Taller de Migrate 2
 
Instaladores Live
Instaladores LiveInstaladores Live
Instaladores Live
 
Web 2.0 / Ajax
Web 2.0 / AjaxWeb 2.0 / Ajax
Web 2.0 / Ajax
 
Debian Packaging
Debian PackagingDebian Packaging
Debian Packaging
 

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

Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosAmado Arcaya
 
Conferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical HackingConferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical HackingHacking Bolivia
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar informaciónJAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar informaciónUniversidad Santo Tomás
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsFátima Casaú Pérez
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webParadigma Digital
 
Desarrollo web con php
Desarrollo web con phpDesarrollo web con php
Desarrollo web con phpscotw08
 
Backtrack 5 manual traducido
Backtrack 5 manual traducidoBacktrack 5 manual traducido
Backtrack 5 manual traducidossuser8f1d221
 
Aprendizaje Supervisado con DauroLab
Aprendizaje Supervisado con DauroLabAprendizaje Supervisado con DauroLab
Aprendizaje Supervisado con DauroLabAlfonso E. Romero
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsDavid Ballén
 

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

Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
 
Conferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical HackingConferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical Hacking
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar informaciónJAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
 
Desarrollo web con php
Desarrollo web con phpDesarrollo web con php
Desarrollo web con php
 
Backtrack 5 manual traducido
Backtrack 5 manual traducidoBacktrack 5 manual traducido
Backtrack 5 manual traducido
 
Pro ft pd
Pro ft pdPro ft pd
Pro ft pd
 
13proftpd
13proftpd13proftpd
13proftpd
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Aprendizaje Supervisado con DauroLab
Aprendizaje Supervisado con DauroLabAprendizaje Supervisado con DauroLab
Aprendizaje Supervisado con DauroLab
 
Semana 6 Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2Semana 6   Módulos en Python Entrega 2
Semana 6 Módulos en Python Entrega 2
 
Openldap
OpenldapOpenldap
Openldap
 
Desarrollo web con php unidad 3
Desarrollo web con php unidad 3Desarrollo web con php unidad 3
Desarrollo web con php unidad 3
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para Frontends
 
Ud3 inocente alcaide
Ud3 inocente alcaideUd3 inocente alcaide
Ud3 inocente alcaide
 

Último

-------The master footking--------------
-------The master footking---------------------The master footking--------------
-------The master footking--------------marcosjuarez32
 
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdf
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdfProyecto Fetemba 3.0 Noviembre 2023 vf.pdf
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdfnicolas cañeque
 
No es cuestión de LECHE, es cuestión de ACTITUD .pdf
No es cuestión de LECHE, es cuestión de ACTITUD .pdfNo es cuestión de LECHE, es cuestión de ACTITUD .pdf
No es cuestión de LECHE, es cuestión de ACTITUD .pdfk2yftjdwsn
 
Reunion 7 Hipodromo La Rinconada 250224.pdf
Reunion 7 Hipodromo La Rinconada 250224.pdfReunion 7 Hipodromo La Rinconada 250224.pdf
Reunion 7 Hipodromo La Rinconada 250224.pdfWinston1968
 
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdf
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdfCONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdf
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdfeluniversocom
 
R6 La Rinconada 180224.pdf
R6 La Rinconada 180224.pdfR6 La Rinconada 180224.pdf
R6 La Rinconada 180224.pdfWinston1968
 
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdf
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdfProgramación deportiva DIRECTV - 16 al 23 de Febrero.pdf
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdfeluniversocom
 
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdfOrlandoGmez23
 
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdf
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdfRevista Rosaleda Fans (Nº 2) (segunda tirada) .pdf
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdfDaniel Gutierrez Arcos
 
The master footking-Tienda online de futbol
The master footking-Tienda online de futbolThe master footking-Tienda online de futbol
The master footking-Tienda online de futbolmarrc0607
 
Reunion 4 Hipodromo Nacional de Valencia 240224.pdf
Reunion 4 Hipodromo Nacional de Valencia 240224.pdfReunion 4 Hipodromo Nacional de Valencia 240224.pdf
Reunion 4 Hipodromo Nacional de Valencia 240224.pdfWinston1968
 

Último (11)

-------The master footking--------------
-------The master footking---------------------The master footking--------------
-------The master footking--------------
 
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdf
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdfProyecto Fetemba 3.0 Noviembre 2023 vf.pdf
Proyecto Fetemba 3.0 Noviembre 2023 vf.pdf
 
No es cuestión de LECHE, es cuestión de ACTITUD .pdf
No es cuestión de LECHE, es cuestión de ACTITUD .pdfNo es cuestión de LECHE, es cuestión de ACTITUD .pdf
No es cuestión de LECHE, es cuestión de ACTITUD .pdf
 
Reunion 7 Hipodromo La Rinconada 250224.pdf
Reunion 7 Hipodromo La Rinconada 250224.pdfReunion 7 Hipodromo La Rinconada 250224.pdf
Reunion 7 Hipodromo La Rinconada 250224.pdf
 
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdf
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdfCONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdf
CONVOCATORIA CONGRESO ORDINARIO 2024- PRENSA[1].pdf
 
R6 La Rinconada 180224.pdf
R6 La Rinconada 180224.pdfR6 La Rinconada 180224.pdf
R6 La Rinconada 180224.pdf
 
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdf
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdfProgramación deportiva DIRECTV - 16 al 23 de Febrero.pdf
Programación deportiva DIRECTV - 16 al 23 de Febrero.pdf
 
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf
60-ejercicios-fisicos-en-futbol-con-pequeno-equipamiento.pdf
 
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdf
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdfRevista Rosaleda Fans (Nº 2) (segunda tirada) .pdf
Revista Rosaleda Fans (Nº 2) (segunda tirada) .pdf
 
The master footking-Tienda online de futbol
The master footking-Tienda online de futbolThe master footking-Tienda online de futbol
The master footking-Tienda online de futbol
 
Reunion 4 Hipodromo Nacional de Valencia 240224.pdf
Reunion 4 Hipodromo Nacional de Valencia 240224.pdfReunion 4 Hipodromo Nacional de Valencia 240224.pdf
Reunion 4 Hipodromo Nacional de Valencia 240224.pdf
 

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? me.apunto@crononauta.com http://crononauta.com/ http://al.quimia.net/ Javier Carranza javier.carranza@crononauta.com twitter: @trunks