Este documento describe varias herramientas para medir el desempeño de aplicaciones PHP, incluyendo Apache Benchmark para probar el rendimiento del servidor web, Siege para pruebas de carga, y las extensiones Zend Debugger y Xdebug para perfilado y análisis del desempeño de código PHP. El autor enfatiza la importancia de medir el desempeño antes de optimizar el código para identificar cuellos de botella reales.
2. Quién soy?
• PHP desde hace 12
años
• Zend Certified
Engineer
Carlos Nacianceno
• Instructor de cursos
Zend
• El Taller Web
3. 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.
4. ¿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
5. Recursos
• Recursos para una aplicación web
– Procesamiento
– Memoria
– Ancho de Banda
• Tradicionalmente
– Limitados
– Costosos
– Lenta disposición
6. 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
8. 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.
9. 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
10. 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
13. 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/
15. 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
17. 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
18. 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
19. 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
21. 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
22. 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
24. 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();
25. 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