Profilierung von PHP-Code: Engpässe in der Praxis finden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Profilierung von PHP-Code: Engpässe in der Praxis finden



Jeder PHP-Entwickler stößt früher oder später auf Leistungsprobleme. Die Website wird langsamer, Seiten laden 10 Sekunden und der Server kämpft unter der Last. Anstatt zu raten und den gesamten Code umzuschreiben, sollte man die Profilierung nutzen – einen wissenschaftlichen Ansatz zur Suche nach Engpässen. In diesem Artikel betrachten wir praktische Werkzeuge und Methoden, die Ihnen helfen, „Flaschenhälse“ in PHP-Anwendungen schnell zu finden und zu beseitigen.



Warum ist Profilierung notwendig?



Ohne Profilierung arbeiten Sie im Blindflug. Sie können Stunden mit der Optimierung einer Schleife verbringen, die 0,01 % der Zeit ausmacht, und das eigentliche Problem übersehen – zum Beispiel eine langsame SQL-Abfrage oder ein Speicherleck. Die Profilierung liefert genaue Zahlen:



  • wie lange jede Funktion ausgeführt wird;
  • wie oft sie aufgerufen wird;
  • wie viel Speicher verwendet wird;
  • welche Datenbankabfragen das System verlangsamen.


Dies ermöglicht Entscheidungen auf Basis von Daten, nicht von Intuition.



Werkzeuge zur PHP-Profilierung



Betrachten wir drei Hauptansätze: integrierte Funktionen, Xdebug und Cloud-Dienste.



1. Integrierte PHP-Funktionen: microtime und memory_get_usage



Der einfachste Weg ist die Verwendung von microtime(true) und memory_get_usage(). Dies eignet sich für eine schnelle Überprüfung eines einzelnen Codeabschnitts.



<?php$start = microtime(true);$startMemory = memory_get_usage();

// Ihr zu überprüfender Code$array = range(1, 100000);usort($array, function($a, $b) { return $a <= $b ? 1 : -1;});

$time = microtime(true) - $start;$memory = memory_get_usage() - $startMemory;

echo "Ausführungszeit: " . round($time, 4) . " Sek";echo "Speichernutzung: " . round($memory / 1024 / 1024, 2) . " MB";?>


Vorteile: Keine Installation erforderlich, funktioniert auf jedem Hosting.
Nachteile: Nicht skalierbar, Markierungen müssen manuell gesetzt werden.



2. Xdebug + Profiler



Xdebug ist eine leistungsstarke Erweiterung für Debugging und Profilierung. Nach Installation und Konfiguration generiert es Profildateien im Cachegrind-Format. Diese Dateien können mit folgenden Werkzeugen analysiert werden:



  • KCacheGrind (Linux) oder QCacheGrind (Windows/Mac) – Desktop-Anwendungen;
  • Webgrind – Weboberfläche für schnelle Ansicht.


Konfiguration in php.ini:



zend_extension=xdebug.soxdebug.mode=profilexdebug.output_dir=/tmp/profilingxdebug.profiler_output_name=cachegrind.out.%p


Nach dem Ausführen des Skripts erhalten Sie eine Datei, die Sie in QCacheGrind öffnen können. Sie sehen einen Aufrufbaum, die Ausführungszeit jeder Funktion und die Anzahl der Aufrufe. Dies ist die beste Methode, um „schwere“ Funktionen zu finden.



Analysebeispiel: Wenn Sie sehen, dass die Funktion array_search() 10.000 Mal aufgerufen wird und 40 % der Zeit beansprucht, sollten Sie sie durch eine Hash-Tabelle ersetzen (isset($hash[$key])).



3. Blackfire.io – Echtzeit-Profilierung



Blackfire.io ist ein SaaS-Dienst von SensioLabs (den Entwicklern von Symfony). Es erfordert keine Installation einer Erweiterung auf dem Server (ein Agent reicht aus) und bietet eine schöne Weboberfläche mit Empfehlungen.



Installation über Composer:



composer require blackfire/player


Anschließend können Sie jede URL profilieren:



php vendor/bin/blackfire-player --uri="https://example.com/slow-page"


Blackfire hebt automatisch Engpässe hervor: langsame SQL-Abfragen, ineffiziente Schleifen, überflüssige Funktionsaufrufe. Es zeigt auch, wie viel Zeit für I/O (Festplatte, Netzwerk) und CPU aufgewendet wird.



Praktische Beispiele zur Suche nach Engpässen



Betrachten wir ein reales

Blogs

Buchempfehlungen