Depuración y profiling :casos prácticos
Conceptos básicos: Debugging y profiling  ●      Xhprof » https://github.com/facebook/xhprof  ●      Xdebug » https://gith...
xhprof  $ pecl install channel://pecl.php.net/xhprof-0.9.2  $ cd /tmp  $ tar zxvf /tmp/buildd/php5-5.3.3/pear-build-downlo...
xhprof $ su - # cat << EOF > /etc/php5/apache2/xhprof.ini [xhprof] extension=xhprof.so xhprof.output_dir=/tmp/xhprof EOF #...
Xdebug$ su -# apt-get install php5-xdebug vim-nox# cd /tmp# git clone https://github.com/ludovicPelle/vim-xdebug.git# cd v...
Ejemplo 0: Puesta a punto  ●   Objetivo: Inicializar la ejecución de xhprof y reconocer  las métricas generadas por el pro...
Ejemplo 1: Sleep test  ●   Objetivo: Descubrir problemas por exceso de tiempo de  ejecución  ●   Prueba: Implementar una l...
Ejemplo 2: HTTP Request test  ●   Objetivo: Demostrar que las llamadas a recursos  externos son peligrosas si no se contro...
Ejemplo 3: User list peak mem test  ●   Objetivo: Descubrir problemas por exceso de consumo  de memoria  ●   Prueba: Imple...
Ejemplo 4: taxonomy_get_children memory leak  ●   Objetivo: Descubrir problemas por exceso de consumo  de memoria  ●   Pru...
Ideas para probar por tu cuenta: Apc Vs Memcache  ●      Objetivo: Probar el rendimiento de apc Vs. memcache  ●   Prueba: ...
Ideas para probar por tu cuenta: Mysql Vs Apache Solr  ●   Objetivo: Probar el rendimiento de mysql Vs. Apache  Solr  ●   ...
Ejemplo 5: Ejemplo de depuración con xdebug  ●      Objetivo: Demostrar un ejemplo de uso de xdebug  ●   Prueba: Recorrer ...
Lets download!https://github.com/eurodev/profiling-tutorialJavier Carranzajavier.carranza@crononauta.comtwitter: @trunks
¿Dudas? ¿Preguntas?        Trabaja con nosotros:     me.apunto@crononauta.com           http://crononauta.com/            ...
Upcoming SlideShare
Loading in …5
×

Cómo diagnosticar problemas de rendimiento en entornos LAMP

598 views
519 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
598
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cómo diagnosticar problemas de rendimiento en entornos LAMP

  1. 1. Depuración y profiling :casos prácticos
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  14. 14. Lets download!https://github.com/eurodev/profiling-tutorialJavier Carranzajavier.carranza@crononauta.comtwitter: @trunks
  15. 15. ¿Dudas? ¿Preguntas? Trabaja con nosotros: me.apunto@crononauta.com http://crononauta.com/ http://al.quimia.net/Javier Carranzajavier.carranza@crononauta.comtwitter: @trunks

×