Cross-Posting meiner Referenz aus der SO Documentation Beta, die offline geschaltet wird.
Profilerstellung mit XDebug
Eine PHP-Erweiterung namens Xdebug hilft bei der Profilerstellung von PHP-Anwendungen sowie beim Debuggen zur Laufzeit. Beim Ausführen des Profilers wird die Ausgabe in eine Datei in einem Binärformat namens "Cachegrind" geschrieben. Auf jeder Plattform stehen Anwendungen zur Analyse dieser Dateien zur Verfügung. Für diese Profilerstellung sind keine Änderungen des Anwendungscodes erforderlich.
Um die Profilerstellung zu aktivieren, installieren Sie die Erweiterung und passen Sie die Einstellungen für php.ini an. Einige Linux-Distributionen werden mit Standardpaketen geliefert (z. B. Ubuntus php-xdebug
Paket). In unserem Beispiel führen wir das Profil optional basierend auf einem Anforderungsparameter aus. Dies ermöglicht es uns, die Einstellungen statisch zu halten und den Profiler nur bei Bedarf einzuschalten.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Verwenden Sie als Nächstes einen Webclient, um eine Anfrage an die URL Ihrer Anwendung zu stellen, die Sie profilieren möchten, z
http://example.com/article/1?XDEBUG_PROFILE=1
Während der Verarbeitung der Seite wird in eine Datei mit einem ähnlichen Namen wie geschrieben
/tmp/cachegrind.out.12345
Standardmäßig ist die Nummer im Dateinamen die Prozess-ID, die sie geschrieben hat. Dies ist mit der xdebug.profiler_output_name
Einstellung konfigurierbar .
Beachten Sie, dass für jede ausgeführte PHP-Anforderung / jeden ausgeführten PHP-Prozess eine Datei geschrieben wird. Wenn Sie beispielsweise einen Formularbeitrag analysieren möchten, wird ein Profil für die GET-Anforderung geschrieben, um das HTML-Formular anzuzeigen. Der Parameter XDEBUG_PROFILE muss an die nachfolgende POST-Anforderung übergeben werden, um die zweite Anforderung zu analysieren, die das Formular verarbeitet. Daher ist es bei der Profilerstellung manchmal einfacher, Curl auszuführen, um ein Formular direkt zu POSTEN.
Analyse der Ausgabe
Nach dem Schreiben kann der Profilcache von einer Anwendung wie KCachegrind oder Webgrind gelesen werden . PHPStorm, eine beliebte PHP-IDE, kann diese Profildaten auch anzeigen .
KCachegrind zeigt beispielsweise Informationen an, darunter:
- Funktionen ausgeführt
- Aufrufzeit, sowohl selbst als auch einschließlich nachfolgender Funktionsaufrufe
- Häufigkeit, mit der jede Funktion aufgerufen wird
- Diagramme aufrufen
- Links zum Quellcode
Wonach schauen
Offensichtlich ist die Leistungsoptimierung sehr spezifisch für die Anwendungsfälle jeder Anwendung. Im Allgemeinen ist es gut zu suchen:
- Wiederholte Aufrufe derselben Funktion, die Sie nicht erwarten würden. Für Funktionen, die Daten verarbeiten und abfragen, sind dies möglicherweise die besten Möglichkeiten für Ihre Anwendung, zwischengespeichert zu werden.
- Langsam laufende Funktionen. Wo verbringt die Anwendung die meiste Zeit? Die beste Auszahlung bei der Leistungsoptimierung besteht darin, sich auf die Teile der Anwendung zu konzentrieren, die am meisten Zeit in Anspruch nehmen.
Hinweis : Xdebug und insbesondere seine Profiling-Funktionen sind sehr ressourcenintensiv und verlangsamen die PHP-Ausführung. Es wird empfohlen, diese nicht in einer Produktionsserverumgebung auszuführen.