Minimal-Profiling für PHP mit Xdebug und Webgrind

19.02.2009 Netz und Web Kommentieren

Die effiziente Nutzung begrenzter Ressourcen, ist nicht nur ein ökonomisches und ökologisches Anliegen, auch bei der Entwicklung von Webanwendungen ist der schonende Umgang mit der zur Verfügung stehenden Rechen- und Speicherkapazität ein wichtiger Aspekt.

Bei einem kleinen Backend-Skript mag es wenig sinnvoll sein auch noch die letzte Mikrosekunde rauszukitzeln. Bei offenen Webpräsenzen, deren Server der potentiellen „Gefahr“ ausgesetzt ist, durch einen Link von einer großen Webseite aufgrund des Besucheransturms in die Knie gezwungen zu werden, sollten allzu enge Flaschenhälse jedoch vermieden werden.

Zum Aufspüren von Geschwindigkeitsproblemen in PHP-Anwendungen, die durch einzelne Funktionen verursacht werden, bietet sich die Kombination aus Xdebug und Webgrind an, um ein minimales Profiling durchzuführen.

Xdebug installieren und einrichten

Xdebug-LogoXdebug wird als PHP-Modul installiert und bietet neben dem Profiling auch nützliche Möglichkeiten zum Debugging von PHP-Skripten. Für Ubuntu gibt es ein Paket in den Repositories, weshalb die  Installation auch schnell erledigt ist (ein installierter Apache mit PHP vorausgesetzt):
sudo apt-get install php5-xdebug
Anschließend muss man in der Datei /etc/php5/conf.d/xdebug.ini das Profiling aktivieren. Dabei empfiehlt es sich die Trigger-basierte Variante zu wählen, da ansonsten bei jeder Ausführung eines PHP-Skripte eine Profiler-Datei geschrieben wird, was bei umfangreichen Anwendungen schon mal einige Megabyte sein können.
; Laufendes Profiling deaktivieren
xdebug.profiler_enable = 0
; URL-Trigger ?XDEBUG_PROFILE aktivieren
xdebug.profiler_enable_trigger = 1

Standardmäßig werden die Profiler-Dateien in das Verzeichnis /tmp geschrieben. Dies lässt sich jedoch über die Option xdebug.profiler_output_dir nach belieben anpassen. Ruft man nun eines seiner PHP-Skripte mit dem zusätzlichen Parameter XDEBUG_PROFILE (z.B. http://localhost/MeinSkript.php?XDEBUG_PROFILE) auf, so landet eine Datei mit dem Namen cachegrind.out.???? im eingestellten Verzeichnis. Der Inhalt dieser Datei ist auf den ersten Blick nicht wirklich aufschlussreich, allerdings lässt sich das ändern.

Auswertung mit Webgrind

Als Mittel der Wahl zur Auswertung der Cachegrind-Dateien werden in der Xdebug-Dokumentation KCacheGrind und WinCacheGrind empfohlen. Möchte man aber weder KDE-Komponenten, noch das Betriebssystem aus Redmond auf seinem Rechner installieren, muss man sich nach einer Alternative umsehen. Als betriebssystemunabhängige und unkomplizierte Möglichkeit bietet sich Webgrind an.

Webgrind

Die Installation ist denkbar einfach und in drei Schritten erledigt (vorausgesetzt man hat einen lauffähigen Webserver, wovon auszugehen ist, wenn man PHP-Skripte testen will): 1. Herunterladen 2. An geeigneter Stelle entpacken 3. Im Browser aufrufen.
Wer für Xdebug ein anderes Verzeichnis für die Profiler-Dateien gesetzt hat, der muss allerdings noch den Pfad in der config.php entsprechend anpassen.
Sofern entsprechende Profiler-Dateien vorhanden sind, lassen sich diese unter Webgrind über die Dropdown-Box am oberen Bildrand auswählen und per Klick auf den Button auswerten. Die Auswertung lässt sich wahlweise prozentual, nach Milli- oder Mikrosekunden vornehmen. Die Übersicht bietet die Möglichkeit sich anzeigen zu lassen durch welche Funktion die jeweils betrachtete Funktion aufgerufen wurde und die dazugehörige Stelle lässt sich auch im Quelltext anzeigen.

Fazit

Mit Xdebug und Webgrind lässt sich relativ einfach ein kurzer Überblick, über die Laufzeiten der einzelnen Funktionen eines PHP-Skripts, erreichen. Flaschenhälse lassen sich so schnell identifizieren und potentiellen Problemen bei steigenden Besucherzahlen, kann somit vorgebeugt werden.

Dein Kommentar

Zum Seitenanfang