SlideShare una empresa de Scribd logo
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)
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

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
 
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
 
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
 
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
 
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
 
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
 
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

El Boletín de Espeleología PTM, Número 3, 2024
El Boletín de Espeleología PTM, Número 3, 2024El Boletín de Espeleología PTM, Número 3, 2024
El Boletín de Espeleología PTM, Número 3, 2024Jose Luis adptresmares
 
Agenda Deportiva Directv - 12 al 19 de abril
Agenda Deportiva Directv - 12 al 19 de abrilAgenda Deportiva Directv - 12 al 19 de abril
Agenda Deportiva Directv - 12 al 19 de abrileluniversocom
 
Reunion 8 Hipodromo Nacional de Valencia 200424.pdf
Reunion 8 Hipodromo Nacional de Valencia 200424.pdfReunion 8 Hipodromo Nacional de Valencia 200424.pdf
Reunion 8 Hipodromo Nacional de Valencia 200424.pdfWinston1968
 
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...agssports.com
 
Ejemplos de situaciones significativas de Educación Física para la evaluación...
Ejemplos de situaciones significativas de Educación Física para la evaluación...Ejemplos de situaciones significativas de Educación Física para la evaluación...
Ejemplos de situaciones significativas de Educación Física para la evaluación...CarlosAzalde
 
Reunion 15 Hipodromo La Rinconada 210424.pdf
Reunion 15 Hipodromo La Rinconada 210424.pdfReunion 15 Hipodromo La Rinconada 210424.pdf
Reunion 15 Hipodromo La Rinconada 210424.pdfWinston1968
 
Reunion 14 Hipodromo La Rinconada 140424.pdf
Reunion 14 Hipodromo La Rinconada 140424.pdfReunion 14 Hipodromo La Rinconada 140424.pdf
Reunion 14 Hipodromo La Rinconada 140424.pdfWinston1968
 

Último (7)

El Boletín de Espeleología PTM, Número 3, 2024
El Boletín de Espeleología PTM, Número 3, 2024El Boletín de Espeleología PTM, Número 3, 2024
El Boletín de Espeleología PTM, Número 3, 2024
 
Agenda Deportiva Directv - 12 al 19 de abril
Agenda Deportiva Directv - 12 al 19 de abrilAgenda Deportiva Directv - 12 al 19 de abril
Agenda Deportiva Directv - 12 al 19 de abril
 
Reunion 8 Hipodromo Nacional de Valencia 200424.pdf
Reunion 8 Hipodromo Nacional de Valencia 200424.pdfReunion 8 Hipodromo Nacional de Valencia 200424.pdf
Reunion 8 Hipodromo Nacional de Valencia 200424.pdf
 
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...
Alberca Olímpica de Aguascalientes fue el ganador de la Copa San Marcos 2024 ...
 
Ejemplos de situaciones significativas de Educación Física para la evaluación...
Ejemplos de situaciones significativas de Educación Física para la evaluación...Ejemplos de situaciones significativas de Educación Física para la evaluación...
Ejemplos de situaciones significativas de Educación Física para la evaluación...
 
Reunion 15 Hipodromo La Rinconada 210424.pdf
Reunion 15 Hipodromo La Rinconada 210424.pdfReunion 15 Hipodromo La Rinconada 210424.pdf
Reunion 15 Hipodromo La Rinconada 210424.pdf
 
Reunion 14 Hipodromo La Rinconada 140424.pdf
Reunion 14 Hipodromo La Rinconada 140424.pdfReunion 14 Hipodromo La Rinconada 140424.pdf
Reunion 14 Hipodromo La Rinconada 140424.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