SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados (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
 

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

Semelhante 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
 

Semelhante 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

Presentación de la edición 12º Revista "Voley" 2024
Presentación de la edición 12º Revista "Voley" 2024Presentación de la edición 12º Revista "Voley" 2024
Presentación de la edición 12º Revista "Voley" 2024Judith Chuquipul
 
Reunion 9 Hipodromo Nacional de Valencia 040524.pdf
Reunion 9 Hipodromo Nacional de Valencia 040524.pdfReunion 9 Hipodromo Nacional de Valencia 040524.pdf
Reunion 9 Hipodromo Nacional de Valencia 040524.pdfWinston1968
 
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdf
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdfAgendadeportiva-Directv - 26 de abril al 3 de mayo.pdf
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdfeluniversocom
 
Revista del Club A. Banfield - Abril 2024
Revista del Club A. Banfield - Abril 2024Revista del Club A. Banfield - Abril 2024
Revista del Club A. Banfield - Abril 2024LeonardoCedrn
 
Reunion 17 Hipodromo La Rinconada 050524.pdf
Reunion 17 Hipodromo La Rinconada 050524.pdfReunion 17 Hipodromo La Rinconada 050524.pdf
Reunion 17 Hipodromo La Rinconada 050524.pdfWinston1968
 
Habilidades Motrices Básicas de manera didáctica para niños
Habilidades Motrices Básicas de manera didáctica para niñosHabilidades Motrices Básicas de manera didáctica para niños
Habilidades Motrices Básicas de manera didáctica para niñosdamianpacheco01
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 

Último (7)

Presentación de la edición 12º Revista "Voley" 2024
Presentación de la edición 12º Revista "Voley" 2024Presentación de la edición 12º Revista "Voley" 2024
Presentación de la edición 12º Revista "Voley" 2024
 
Reunion 9 Hipodromo Nacional de Valencia 040524.pdf
Reunion 9 Hipodromo Nacional de Valencia 040524.pdfReunion 9 Hipodromo Nacional de Valencia 040524.pdf
Reunion 9 Hipodromo Nacional de Valencia 040524.pdf
 
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdf
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdfAgendadeportiva-Directv - 26 de abril al 3 de mayo.pdf
Agendadeportiva-Directv - 26 de abril al 3 de mayo.pdf
 
Revista del Club A. Banfield - Abril 2024
Revista del Club A. Banfield - Abril 2024Revista del Club A. Banfield - Abril 2024
Revista del Club A. Banfield - Abril 2024
 
Reunion 17 Hipodromo La Rinconada 050524.pdf
Reunion 17 Hipodromo La Rinconada 050524.pdfReunion 17 Hipodromo La Rinconada 050524.pdf
Reunion 17 Hipodromo La Rinconada 050524.pdf
 
Habilidades Motrices Básicas de manera didáctica para niños
Habilidades Motrices Básicas de manera didáctica para niñosHabilidades Motrices Básicas de manera didáctica para niños
Habilidades Motrices Básicas de manera didáctica para niños
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 

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