View
817
Download
0
Category
Preview:
DESCRIPTION
Los slides de la charla en el PHPConMX
Citation preview
Herramientas para la medición del desempeño en PHP
Carlos Nacianceno
Quién soy?
• PHP desde hace 12 años
• Zend Certified Engineer
• Instructor de cursos Zend
• El Taller Web
Carlos Nacianceno
Introducción
• Cuando se desarrolla, pocas veces se toma en cuenta los recursos utilizados por las aplicaciones
• Se ignora si un script consume muchos recursos y más concretamente en que procesos.
• No hay conocimiento de herramientas que nos ayuden a determinar tales cosas.
¿Qué es el desempeño?
• La cantidad de trabajo o procesos que se ejecuta en comparación con los recursos disponibles.
– Que tanto hacemos con lo que tenemos
• Alto/Bajo desempeño
– Aprovechamiento de los recursos, no al tamaño
Recursos
• Recursos para una aplicación web
– Procesamiento
– Memoria
– Ancho de Banda
• Tradicionalmente
– Limitados
– Costosos
– Lenta disposición
Desempeño
• Generalmente el buen desempeño puede reconocerse por:– Baja utilización de los recursos
– Corto tiempo de respuesta
– Transmisión de datos eficiente
– Alta disponibilidad
Para el usuario es la rapidez con la que ve los datos
Benchmarking
• Medir comparativamente
• Punto de vista externo de nuestra aplicación
– Peticiones HTTP
– Web server
–
• Comparaciones justas!!!
Benchmarking
• Medir
– Si determinada URL tiene problemas
– Un cambio en el código
– Cambio en X, o Y
• Obtendremos información concreta con medidas de como se ve desde afuera nuestro sitio o aplicación.
Apache Benchmarking
• Saber cómo se esta desempeñando el Web server
– Y la aplicación que esta sirviendo
• Herramienta CLI
• Incluida con cualquier instalación de Apache
Apache Benchmarking
• Ejecución
• Donde
– -n es el número de peticiones que ab realizará en esta sesión
– -c es el número de peticiones concurrentes
Apache Benchmarking
Apache Benchmarking
Siege
• Load Testing y Benchmarking HTTP
• Permite probar aplicaciones bajo carga simulada
• Número de usuarios simulados configurable
• Incluido en algunas distro Linux
– http://www.joedog.org/pub/siege/
Siege
Siege
• Parte de los resultados que nos entrega son:
– Transacciones totales
– Tiempo total del test
– Tiempo promedio de respuesta para cada usuario
– Concurrencia
– Transacciones exitosas
Siege
Perfilado
• Recolección de información sobre la aplicación durante su ejecución para un análisis.
• Identifica cuellos de botella
• Determinar en que punto de la ejecución:
– Se uso más memoria
– Tomó más tiempo en ejecutar
Zend Debugger
• Extensión PHP
• Freeware instalable a stack PHP prexistente
• Controla la ejecución y obtiene información
• Informes detallados de el desempeño de la ejecución
• Perfilado bajo demanda– Local– Remoto
Zend Debugger
• Cliente (IDE) hace una petición al Servidor
1. Zend Debugger se activa y controla la ejecución
2. Captura la información detallada de la misma
3. Regresa los resultados al cliente
• Gráfica
• Estadísticas de ejecución
• Flujo de ejecución
• Cobertura de código
Zend Debugger
Xdebug
• Extensión PHP
• Open Source
– PECL
• Registra lo ocurrido en la ejecución y genera esos registros para su análisis
• Perfilado encendido o apagado
Xdebug
• Se activa el perfilador de Xdebug
1. xdebug.profiler_enable a 1
• xdebug.profiler_enable_trigger
2. xdebug.profiler_output_dir
3. Captura información de la ejecución
4. Guarda resultados
• Gráfica ( KcheGrind, WinGrind, WebGrind )
• Estadísticas de ejecución
• Flujo de ejecución
• Cobertura de código
Xdebug
Xhprof
• Extensión PHP
• Facebook (PECL)
• Más ligero que Xdebug – Compatible con KcheGrind y similares
• Modificar cada archivo PHP– xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
– $xhprof_data = xhprof_disable();
Optimización prematura
• Optimizar el código antes de saber donde están los cuellos de botella.
• Hacer cambios para intentar que la aplicación “sea más rápida”
– Estos cambios resultan costosos en tiempo
– “Tunear” el web server o sistema operativo sin “tunear” primero la aplicación
– Simplemente escalar la plataforma con más recursos
Preguntas?
Gracias
@igormx
@eltallerweb
http://eltallerweb.com
Recommended