2010-10-28 5 views
6

Gibt es eine Möglichkeit, nur langsam PHP Seiten auf einem Produktionsserver Profiling?Profil langsam PHP-Seiten in der Produktion

Im Moment protokollieren wir langsame Seiten in eine Textdatei, aber ohne weitere Informationen ist es schwer zu sagen, warum sie langsam sind (nicht konsistent langsam).

Ich habe zuvor den Xdebug Profiler verwendet, aber ich möchte dies auf unseren Produktionsservern nicht aktivieren, da wir wahrscheinlich 100 Anfragen pro Sekunde erhalten. Ich habe auch Zend Platform verwendet, aber ich möchte das nicht wirklich neu installieren.

+0

Wenn Sie MySQL verwenden, vergewissern Sie sich, dass "Langsames Abfrageprotokoll" aktiv ist. – c0rnh0li0

Antwort

3

Sie können Ihre Apache/HTTP Server-Protokolle ändern, um die Zeit aufzuzeichnen, die für die Ausführung der einzelnen Anfragen aufgewendet wurde. Folgen Sie zum Beispiel this guide. Dann können Sie Daten darüber sammeln, wie lange jede Anfrage dauert, die langsamen Seiten/Anfragen identifizieren und XDebug oder WebGrind verwenden, um die Ursachen weiter zu analysieren.

Einfach und ohne großen Aufwand auf Ihrem Produktionsserver.

+0

Super, es gibt einen Link in den Kommentaren zu mod-log-firstbyte - http://code.google.com/p/mod-log-firstbyte/, der sich in die Apache-Protokollverarbeitungszeit einloggen sollte. – Noodles

+0

Ich kann nicht sagen, dass ich daran gedacht hatte, aber noch besser, nur die Zeit zu protokollieren, die Ihr Server selbst benötigt, um eine Ressource zu bedienen. – Ghostpsalm

2

Sie könnten Timer-Anweisungen schreiben sind Teile der langsamen Seiten, um es einzugrenzen. Dann, sobald einige Daten aufgebaut sind, spülen und wiederholen.

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); 
} 

Überprüfen Sie auch diese: http://particletree.com/features/php-quick-profiler/

Es könnte Ihre Bedürfnisse

+0

PQP sieht gut und schön aus, aber es gibt mir nicht das Detail, nach dem ich gesucht habe. Danke trotzdem. – Noodles

0

Anzug, den ich von einer ganz neuen Bibliothek für einen produktiven Server leery würde. Beim Debuggen verwende ich gerne die Anweisungen * auto_prepend_file * und * auto_append_file * in der php.ini. Sie können leicht wie oben vorgeschlagen mit dieser Methode tun und eine sehr genaue Zeit für jede Seite laden.

Wenn Sie sich Sorgen machen, dass nur langsam geladene Seiten in Sekunden gemessen werden, ist hier eine schnelle und schmutzige Lösung, bei der die Serveranfragezeit von der ungefähren Endzeit in einer automatisch angehängten Datei subtrahiert wird. Sie können das Ergebnis dann in einer db- oder flachen Datei speichern.

zB in 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

Wie ich schon sagte, protokollieren wir bereits langsame Seiten, ich brauche nur mehr Details (zB welche Funktionen langsam sind). – Noodles

+0

Sorry, ich missverstanden. – DrPerdix

0

Ich schlage vor, Sie am webgrind project einen Blick zu nehmen. Sie können die Profilerstellung per Abfrage aktivieren, wodurch Sie möglicherweise Profilerstellungsdaten von Ihrem Produktionsserver ohne große Auswirkungen auf die Leistung abrufen können.

Ich hoffe, dies wird Ihnen helfen,

+0

Das Problem ist, wir wissen nicht, wo die Verlangsamungen sind.Wir brauchen wirklich etwas, das die langsamen Seiten wie die Zend Platform identifizieren würde, aber etwas, das nicht Tausende von Dollar pro Jahr kostet. – Noodles

0

Ich weiß, dass dies nicht die beste Lösung ist, aber ...

Sie können eine Hilfsklasse erstellen jeden Prozess, den Sie haben, zusammen mit Start- und Endzeit anmelden . Ich weiß, dass Sie es bereits für den gesamten Prozess tun, aber für jede Funktion Start und Ende können Sie einen "Profiler :: logtime (FUNC)" hinzufügen;

Verwandte Themen