2009-06-04 12 views
8

Ich arbeite an der Optimierung meiner Website, und ich habe die langsamen MySQL-Abfragen seit ein paar Tagen angemeldet, aber nachdem ich> 260M Abfragen durchlaufen hatte, protokollierte es nur 6 langsame Abfragen, und diese waren spezielle von mir ausgeführt phpMyAdmin. Ich frage mich, ob es etwas gibt, um die Ausführungszeit der langsamen PHP-Seite zu protokollieren, so dass ich bestimmte Seiten finden kann, die Ressourcen hoggen, anstatt spezifische Abfragen.PHP entspricht dem langsamen Abfrageprotokoll von MySQL?

+0

Es könnte sein, dass phpMyAdmin Abfragen niedrige Priorität sind, dass sie als ‚langsam‘ zu zeigen, würde dazu führen, – karim79

+0

Ich war nur, dass zu erwähnen, zu sagen, Das waren keine Abfragen, die auf der Website optimiert werden mussten. –

+2

Wenn Sie genauere Messungen als in der akzeptierten Antwort wünschen, um zu finden, wo in einem Dokument Ihr Engpass ist - können Sie Benchmark von PEAR überprüfen. Sie können Markierungen in Ihrem Code festlegen, um die Flaschenhälse zu finden. –

Antwort

10

Zuerst gibt es xdebug, die einen Profiler hat, aber ich würde das nicht auf einer Produktionsmaschine verwenden, da es Code eingibt und die Geschwindigkeit zu einem Crawl bringt. Sehr gut für Testumgebungen.

Wenn Sie Geschwindigkeiten in einer produktiven Umgebung messen möchten, würde ich nur die Messung manuell durchführen. microtime() ist die Funktion für diese Dinge in PHP. Vorausgesetzt Sie haben eine header.php und eine footer.php, die von alle PHP-Skripte aufgerufen:

# In your header.php (or tpl) 
$GLOBALS['_execution_start'] = microtime(true); 

# In your footer.php (or tpl) 
file_put_contents(
    '/tmp/my_profiling_results.txt', 
    microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n", 
    FILE_APPEND 
); 
+0

Danke, Ihr zweiter Vorschlag ist eine gute Idee. Ich hatte gehofft, dass es einen Weg geben würde, das zu automatisieren, aber das funktioniert ohne viel Aufwand genauso gut. –

+0

Oh, eine Sache hinzuzufügen. FILE_APPEND sollte als Flag hinzugefügt werden, damit Sie nicht nur den letzten Zugriff im Protokoll erhalten. –

+0

Thx, das vergesse ich immer :) – soulmerge

4

Sie könnten Ihre Skripte in einem einfachen Timer wickeln, wie folgt aus:

/*in your header or at the top of the page*/ 
$time_start = microtime(true); 

/* your script goes here */ 

/*in your footer, or at the bottom of the page*/ 
$time_end = microtime(true); 
$time = $time_end - $time_start; 
echo "It took $time seconds\n"; 

Beachten Sie, dass zwei Funktionsabläufe und ein winziges bisschen Mathe als Kopf hinzufügen.

5

was auto_prepend_file und auto_append_file, schrieb nur einen Beitrag darüber http://blog.xrado.si/post/php-slow-log

+0

ist das der richtige Beitrag? http://blog.xrado.si/post/php-slow-log –

+0

ja, ich habe eine neue Domain – xrado

1

Wenn Sie FastCGI verwenden für Ihre PHP-Skripte ausführen Sie die FastCGI Process Manager verwenden können (FPM, php-fpm), die auch ein unterstützt sogenanntes "Slowlog".

Sie können es in der PHP-Konfiguration von Ihrem php-fpm aktivieren (für debian ist dies in /etc/php5/fpm/pool.d/www.conf) mit den Konfigurationsoptionen: request_slowlog_timeout und langsamlog.

request_slowlog_timeout

Der Timeout für eine einzige Anforderung dient, nach der ein PHP Backtrace wird auf die ‚slowlog‘ Datei ausgegeben werden. Ein Wert von '0' bedeutet 'Aus'. Verfügbare Einheiten: s (econds) (Standard), m (inutes), h (ours) oder d (ays). Standardwert: 0.

slowlog

Die Log-Datei für langsame Anfragen. Standardwert: # INSTALL_PREFIX #/log/php-fpm.log.slow.

von http://php.net/manual/en/install.fpm.configuration.php

Siehe auch: http://php.net/manual/en/install.fpm.php und http://rtcamp.com/tutorials/php/fpm-slow-log/

Verwandte Themen