2010-10-28 17 views
6

¿Hay alguna forma de crear perfiles de páginas de PHP lentas en un servidor de producción?Perfil de páginas PHP lentas en producción

Por el momento estamos registrando páginas lentas en un archivo de texto, pero sin más información es difícil decir por qué son lentas (no consistentemente lentas).

He usado el perfilador Xdebug antes, pero realmente no quiero habilitar esto en nuestros servidores de producción ya que es probable que obtengamos 100 solicitudes por segundo. También utilicé Zend Platform, pero realmente no quiero volver a instalarlo.

+0

En caso de que esté utilizando mysql, asegúrese de que el "registro lento de consultas" esté activo. – c0rnh0li0

Respuesta

3

Puede modificar los registros del servidor Apache/HTTP para registrar el tiempo dedicado a atender cada solicitud. Siga this guide por ejemplo. A continuación, puede recopilar datos sobre el tiempo que tarda cada solicitud, identificar las páginas/solicitudes lentas y usar XDebug o WebGrind para analizar las causas.

Fácil, y no es un gran drenaje en su servidor de producción.

+0

Impresionante, hay un enlace en los comentarios a mod-log-firstbyte - http://code.google.com/p/mod-log-firstbyte/ que debe iniciar sesión en el tiempo de procesamiento del registro de Apache. – Noodles

+0

No puedo decir que haya pensado en eso, pero aún mejor para registrar solo el tiempo que tarda el servidor en servir un recurso. – Ghostpsalm

2

Puede escribir las declaraciones del temporizador como parte de las páginas lentas para reducirlas. Luego, una vez que se forman algunos datos, enjuague y repita.

define('START_TIME', microtime(true)); 
function timer() { 
    static $last; 
    $time_since_start = microtime(true) - START_TIME; 
    $time_since_last = microtime(true) - $last; 
    // Do something with $time vars 
    $last = microtime(true); 
} 

También echa un vistazo a esto: http://particletree.com/features/php-quick-profiler/

Podría adaptarse a sus necesidades

+0

PQP se ve bonito y bonito, pero realmente no me da los detalles que estaba buscando. Gracias de cualquier manera. – Noodles

0

Estaría recelosos de una nueva biblioteca entera para un servidor de producción. Cuando estoy depurando, me gusta usar las directivas * auto_prepend_file * y * auto_append_file * en php.ini. Puede hacer lo que se sugiere arriba con este método y obtener un tiempo muy exacto para cada carga de página.

Si le preocupan solo las páginas de carga lenta medidas en segundos, aquí hay una solución rápida y sucia que resta el tiempo de solicitud del servidor de la hora de finalización aproximada en un archivo adjunto automáticamente. A continuación, puede almacenar el resultado en un archivo db o plano.

por ejemplo, en php.in

auto_append_file = [location]/my_timer.php 

my_timer.php

define('TRIGGER_TIME_LOG','3'); // Minimum number of timer seconds to log page load 

$time = time() - $_SERVER['REQUEST_TIME']; // Page load time 

if($time >= TRIGGER_TIME_LOG) 
{ 
    /* 
    * DO LOGGING TO DB OR FLAT FILE HERE 
    */ 
} 
+0

Como ya he dicho, ya estamos registrando páginas lentas, solo necesito más detalles (como qué funciones son lentas). – Noodles

+0

Lo siento, no entendí bien. – DrPerdix

0

sugiero que eche un vistazo a la webgrind project. Puede activar la creación de perfiles por consulta, lo que quizás le permita obtener datos de creación de perfiles de su servidor de producción sin un gran impacto en el rendimiento.

espero que esto le ayudará a

+0

El problema es que no sabemos dónde están las bajas.Realmente necesitamos algo que identifique las páginas lentas como lo hace Zend Platform, pero algo que no cuesta miles de dólares al año. – Noodles

0

Sé que esto no es la mejor solución, pero ...

Puede crear una clase de ayuda para registrar todos los procesos que tiene, junto con la hora de inicio y fin . Sé que ya lo hace para todo el proceso, pero para cada función de inicio y finalización puede agregar un "Profiler :: logtime (FUNC)";

Cuestiones relacionadas