2010-05-27 16 views
14

¿Cuál es la mejor manera para mí de probar el rendimiento de mi código PHP?Prueba de rendimiento del código PHP

+0

especifique si desea probar un bloque de código PHP, un bloque de código que utiliza la base de datos o el rendimiento general de su sitio bajo carga. Los tres casos de uso tienen sus propias herramientas, que se reflejan en las respuestas aquí. – chiborg

+0

Aquí hay [una gran respuesta] (http://stackoverflow.com/a/1202746/4233593) –

Respuesta

6

XDebug (véase la respuesta de Neil Aitken) es útil para identificar problemas de rendimiento pobre en el código PHP - pero sólo se puede utilizar en condiciones muy controladas y restrictivas - no menos importante es difícil de ver lo concurency efecto que tiene sobre la actuación. Mientras que Patrick MARIE sugiere, puede utilizar ab: no es un enfoque viable si la transacción que está tratando de medir abarca más páginas que páginas (por ejemplo, iniciar sesión y crear sesión, agregar un producto aleatorio a la cesta, repetir añadir producto aleatorio N veces ...).

AFAIK no existe una solución basada en PHP para las interacciones de grabación/secuencia de comandos, pero hay Perl + WWW: Mechanize + HTTP: grabadora. O, si es extremadamente rico, podría comprar productos HP de compilación de carga.

Pero es muy difícil implementar pruebas que sean verdaderamente representativas de cómo se usa la aplicación, y el rendimiento de la aplicación (al menos las partes relacionadas con los datos) variará con el tiempo, por lo que debe generar métricas de rendimiento adecuadas en tu codigo.

... y aun así, el tiempo que tarda PHP en generar una página HTML es solo una pequeña parte de la historia de cuánto tarda una página en mostrarse en el navegador.

HTH

C.

+1

Muy bien puesto, es difícil medir cómo su aplicación puede funcionar bajo una carga pesada. Puede usar Selenium en lugar de Mechanize para automatizar navegadores, pero hasta donde yo sé, no está diseñado para pruebas de carga. –

+0

¿por qué mencionar hp loadrunner pero no apache jmeter? –

6

Puede usar microtime() para medir el tiempo de ejecución de su código. Aquí es un fragmento de código básico para que:

$start_timestamp = microtime(true); 
... 
---your Code--- 
... 
$end_timestamp = microtime(true); 
$duration = $end_timestamp - $start_timestamp; 
error_log("Execution took ".$duration." milliseconds."); 
+2

time() devuelve segundos, no milisegundos. Creo que estás buscando algo como [microtime()] (http://ca3.php.net/manual/en/function.microtime.php) –

+3

Siempre obtengo números negativos haciendo esto. ¿Mi programa es más rápido que el tiempo mismo? – Ray

+0

@Raymond: es posible que haya probado la posibilidad de que las partículas se muevan más rápido que la luz :) – Thariama

11

Debe considerar el uso ab (apache benchmark tool) para ejecutar un gran número de consultas y xhprof al perfil/analizar su código. En mi opinión, estos son solo los conceptos básicos pero dan excelentes resultados.

4

xDebug tiene un generador de perfiles incorporado, una vez configurado descargará algunos archivos que se pueden leer con un programa como kcachegrind o WinCacheGrind

Esto entonces le permitirá ver las todas las llamadas de función, llamada media y acumulativo veces y el tiempo total de ejecución del script. Muy útil para encontrar cuellos de botella en tu código.

2

Si desea probar una parte específica del código, considere utilizar el paquete Benchmark de la biblioteca PHP PEAR.

$timer = new Benchmark_Timer(); 
$timer->start(); 
// Code to test here 
$timer->stop(); 
$timer->display(); 
1

Como una nueva mirada a un viejo problema, considere el uso de una herramienta comercial como NewRelic para ayudar en la creación de perfiles. Personalmente los uso para obtener una pequeña muestra de datos, ya sea gratis o a precio nominal. Sin embargo, aprovecho al máximo su prueba de producto con todas las funciones.

Cuestiones relacionadas