SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
Depuración y profiling :
casos prácticos
Conceptos básicos: Debugging y profiling




  ●
      Xhprof » https://github.com/facebook/xhprof


  ●
      Xdebug » https://github.com/ludovicPelle/vim-xdebug


  ●
      Vdebug » https://github.com/joonty/vdebug
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_html/ /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
 # sudo apt-get install graphviz
 # /etc/init.d/apache2 reload
Xdebug
$ su -
# apt-get install php5-xdebug vim-nox
# cd /tmp
# git clone https://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.git
# cp -ra vdebug/plugin/. /usr/share/vim/vim72/plugin/
# cp -ra vdebug/syntax/. /usr/share/vim/vim72/syntax/
Ejemplo 0: Puesta a punto



  ●
   Objetivo: Inicializar la ejecución de xhprof y reconocer
  las métricas generadas por el profiler

  ●
    Prueba: Algunos tests para mostrar incrementos de
  picos de memoria, tiempo de cpu, tiempo de ejecución o
  llamadas a funciones

  ●
   Conclusión: Veremos como un buen profiling puede
  permitirnos diagnosticar graves problemas de
  rendimiento y aplicar soluciones extremadamente
  rápidas
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
Ideas para probar por tu cuenta: Apc Vs Memcache




  ●
      Objetivo: Probar el rendimiento de apc Vs. memcache

  ●
   Prueba: Almacenar un contenido en apc y memcache en
  dos tests distintos. Probar las consultas con xhprof y
  comparar resultados.

  ●
      Conclusión: ¿Quién ganará?
Ideas para probar por tu cuenta: Mysql Vs Apache Solr




  ●
   Objetivo: Probar el rendimiento de mysql Vs. Apache
  Solr

  ●
    Prueba: Efectuar consultas sobre Mysql y Solr, teniendo
  indexados previamente todos los contenidos en Solr

  ●
   Conclusión: ¿Quién ganará? Apuesto por Solr si
  hacemos pruebas de estrés con una buena cantidad de
  consultas ;-)
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
Let's download!


https://github.com/eurodev/profiling-tutorial




Javier Carranza
javier.carranza@crononauta.com
twitter: @trunks
¿Dudas? ¿Preguntas?

        Trabaja con nosotros:
     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 (18)

Estructuras de Control Repetitivo
Estructuras de Control RepetitivoEstructuras de Control Repetitivo
Estructuras de Control Repetitivo
 
Informe8
Informe8Informe8
Informe8
 
6.Métodos en Java
6.Métodos en Java6.Métodos en Java
6.Métodos en Java
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino Calderon
 
Programación III (Java) - 09 Cierre
Programación III (Java) - 09 CierreProgramación III (Java) - 09 Cierre
Programación III (Java) - 09 Cierre
 
Kt condicionales en php
Kt condicionales en phpKt condicionales en php
Kt condicionales en php
 
Condicionales
CondicionalesCondicionales
Condicionales
 
Tabla de multiplicar con for y while
Tabla de multiplicar con for y whileTabla de multiplicar con for y while
Tabla de multiplicar con for y while
 
Tabla de multiplicar con while
Tabla de multiplicar con whileTabla de multiplicar con while
Tabla de multiplicar con while
 
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
 
Variables y Bucles
Variables y BuclesVariables y Bucles
Variables y Bucles
 
Front end workflows
Front end workflowsFront end workflows
Front end workflows
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
 
Realidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapirRealidad Aumentada 01 documentacion tapir
Realidad Aumentada 01 documentacion tapir
 
5
55
5
 
7
77
7
 
3
33
3
 
Lenguaje en c
Lenguaje en cLenguaje en c
Lenguaje en c
 

Semelhante a Cómo diagnosticar problemas de rendimiento en entornos LAMP

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
 
Argentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptxGabriela Soto
 
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
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0wcuestas
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkMario IC
 
Masterclass ADWE Madrid
Masterclass ADWE MadridMasterclass ADWE Madrid
Masterclass ADWE MadridKubide
 
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
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Iván López Martín
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytestHector Canto
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalAlberto Permuy Leal
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 

Semelhante a Cómo diagnosticar problemas de rendimiento en entornos LAMP (20)

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
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Argentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeterArgentesting 2017 - Performance testing 101 con jmeter
Argentesting 2017 - Performance testing 101 con jmeter
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
[Shared] ML Bootcamp - GDG Barcelona - Semana 4.pptx
 
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
 
Scripting para Pentesters v1.0
Scripting para Pentesters v1.0Scripting para Pentesters v1.0
Scripting para Pentesters v1.0
 
Ud3 inocente alcaide
Ud3 inocente alcaideUd3 inocente alcaide
Ud3 inocente alcaide
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Masterclass ADWE Madrid
Masterclass ADWE MadridMasterclass ADWE Madrid
Masterclass ADWE Madrid
 
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
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Doble o nada
Doble o nadaDoble o nada
Doble o nada
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Symfony parte 16
Symfony parte 16Symfony parte 16
Symfony parte 16
 
Testing efectivo con pytest
Testing efectivo con pytestTesting efectivo con pytest
Testing efectivo con pytest
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en Drupal
 
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
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 

Mais de Javier Carranza

Mais de Javier Carranza (6)

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

Cómo diagnosticar problemas de rendimiento en entornos LAMP

  • 1. Depuración y profiling : casos prácticos
  • 2. Conceptos básicos: Debugging y profiling ● Xhprof » https://github.com/facebook/xhprof ● Xdebug » https://github.com/ludovicPelle/vim-xdebug ● Vdebug » https://github.com/joonty/vdebug
  • 3. 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_html/ /usr/share/php $ cp -ra xhprof_lib/ /usr/share/php $ cd extension/ $ phpize $ ./configure $ make && make install
  • 4. 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 # sudo apt-get install graphviz # /etc/init.d/apache2 reload
  • 5. Xdebug $ su - # apt-get install php5-xdebug vim-nox # cd /tmp # git clone https://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.git # cp -ra vdebug/plugin/. /usr/share/vim/vim72/plugin/ # cp -ra vdebug/syntax/. /usr/share/vim/vim72/syntax/
  • 6. Ejemplo 0: Puesta a punto ● Objetivo: Inicializar la ejecución de xhprof y reconocer las métricas generadas por el profiler ● Prueba: Algunos tests para mostrar incrementos de picos de memoria, tiempo de cpu, tiempo de ejecución o llamadas a funciones ● Conclusión: Veremos como un buen profiling puede permitirnos diagnosticar graves problemas de rendimiento y aplicar soluciones extremadamente rápidas
  • 7. 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
  • 8. 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)
  • 9. 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
  • 10. 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
  • 11. Ideas para probar por tu cuenta: Apc Vs Memcache ● Objetivo: Probar el rendimiento de apc Vs. memcache ● Prueba: Almacenar un contenido en apc y memcache en dos tests distintos. Probar las consultas con xhprof y comparar resultados. ● Conclusión: ¿Quién ganará?
  • 12. Ideas para probar por tu cuenta: Mysql Vs Apache Solr ● Objetivo: Probar el rendimiento de mysql Vs. Apache Solr ● Prueba: Efectuar consultas sobre Mysql y Solr, teniendo indexados previamente todos los contenidos en Solr ● Conclusión: ¿Quién ganará? Apuesto por Solr si hacemos pruebas de estrés con una buena cantidad de consultas ;-)
  • 13. 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
  • 15. ¿Dudas? ¿Preguntas? Trabaja con nosotros: me.apunto@crononauta.com http://crononauta.com/ http://al.quimia.net/ Javier Carranza javier.carranza@crononauta.com twitter: @trunks