Flame Graph in PHP: Performance visuell analysieren mit Xdebug
Flame Graphs in PHP mit Xdebug erstellen. CPU und Memory Profiling fuer PHPUnit Tests und Symfony Anwendungen visuell analysieren. Praxis Anleitung.
Mehr erfahren
SPX (Simple Profiling eXtension) ist eine kostenlose, quelloffene PHP Extension für Performance Profiling. Die Extension analysiert PHP Anwendungen in Echtzeit und liefert detaillierte Metriken zu Ausführungszeiten, Speicherverbrauch und I/O Operationen. Im Gegensatz zu kommerziellen Alternativen bleibt SPX vollständig auf der eigenen Infrastruktur, es werden keine Daten an externe Dienste übertragen.
SPX unterscheidet sich von etablierten Profilern wie Xdebug und XHProf durch seine integrierte Web UI, die Flamegraphs, Timelines und Flat Profiles direkt im Browser darstellt. Die Extension unterstützt 22 verschiedene Metriken, darunter Wall Time, CPU Time, Zend Engine Memory, RSS Memory und I/O Bytes. Ein entscheidender Vorteil gegenüber XHProf: SPX bewahrt den vollständigen Call Stack, wodurch kontextbezogene Analysen wie Flamegraph Visualisierungen möglich werden.
Die Extension ist unter der GPL-3.0 Lizenz veröffentlicht und wird aktiv weiterentwickelt. SPX eignet sich besonders für Entwicklungsumgebungen und Staging Systeme, in denen Performance Bottlenecks ohne externen Service identifiziert werden sollen. Laravel Herd integriert SPX bereits nativ als bevorzugten Profiler für lokale PHP Entwicklung.
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
SPX wird direkt aus dem Quellcode kompiliert, da keine vorgefertigten Pakete in den gängigen Distributionen verfügbar sind. Die Installation erfordert die PHP Entwicklungspakete und die zlib Bibliothek. Der folgende Ablauf funktioniert auf Ubuntu, Debian und vergleichbaren Linux Systemen.
sudo apt install zlib1g-dev php-dev
git clone https://github.com/NoiseByNorthwest/php-spx.git
cd php-spx
phpize
./configure
make
sudo make install
Nach der Kompilierung muss die Extension in der php.ini oder einer eigenen spx.ini Datei aktiviert werden. Für Webserver Profiling sind zusätzliche Konfigurationsparameter notwendig, um die HTTP Schnittstelle und den Sicherheitsschlüssel zu setzen.
extension=spx.so
spx.http_enabled=1
spx.http_key="dein_geheimer_schluessel"
spx.http_ip_whitelist="127.0.0.1"
Für Docker Umgebungen lässt sich SPX in einem Multi Stage Build integrieren. Die kompilierte Extension und die Web UI Assets werden dabei aus einem Builder Container in das finale Image kopiert. Wer Laravel Herd nutzt, kann SPX mit einem einzigen Befehl für alle installierten PHP Versionen einrichten.
# Laravel Herd Installation
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/beyondcode/php-spx/HEAD/install.sh)"
SPX bietet zwei Profiling Modi: Web Request Profiling über die integrierte Browser Oberfläche und CLI Profiling über Umgebungsvariablen. Im deaktivierten Zustand erzeugt SPX keinen messbaren Performance Overhead, die Extension kann daher dauerhaft geladen bleiben.
Für CLI Profiling genügt es, die Umgebungsvariable SPX_ENABLED=1 vor dem PHP Befehl zu setzen. SPX erstellt automatisch einen vollständigen Report, der über die Web UI analysiert werden kann.
SPX_ENABLED=1 php bin/console cache:clear
SPX_ENABLED=1 SPX_REPORT=full php artisan migrate
Die wichtigsten Konfigurationsoptionen in der php.ini umfassen spx.http_enabled für die Web UI, spx.http_key als Authentifizierungsschlüssel, spx.http_ip_whitelist für die IP Beschränkung und spx.data_dir für den Speicherort der Profiling Daten. Bei PHP-FPM Setups muss zusätzlich process.dumpable = yes in der Pool Konfiguration gesetzt werden, damit SPX auf /proc/self zugreifen kann.
Der Sampling Modus eignet sich für langlebige Prozesse oder besonders CPU intensive Skripte. Statt jeden einzelnen Funktionsaufruf zu tracken, erfasst SPX in regelmäßigen Intervallen den aktuellen Call Stack. Das reduziert den Overhead erheblich und liefert bei Zeitanalysen oft genauere Ergebnisse, da kurze, häufig aufgerufene Funktionen nicht überbewertet werden.
Die integrierte Web UI ist das Alleinstellungsmerkmal von SPX gegenüber anderen Open Source PHP Profilern. Sie wird automatisch mit der Extension installiert und ist über den konfigurierten PHP Webprozess erreichbar. Die Oberfläche bietet drei interaktive Visualisierungen:
Die Analyse kann zwischen 22 Metriken umgeschaltet werden, darunter Wall Time, CPU Time, Idle Time, Zend Memory Usage, Memory Allocations, RSS Memory, Object Count, File Count, I/O Read und I/O Write. Die farbliche Markierung der Blöcke richtet sich standardmäßig nach den Kosten, lässt sich aber über ein konfigurierbares Farbschema auf Kategorien umstellen.
Ein besonderes Feature ist die Overhead Korrektur: SPX misst den eigenen Profiling Overhead und subtrahiert ihn von den gemessenen Ausführungszeiten. Dadurch werden kurze, häufig aufgerufene Funktionen nicht fälschlicherweise als Bottleneck angezeigt, was bei anderen Profilern ein bekanntes Problem darstellt.
Die Wahl des richtigen PHP Profilers hängt vom Einsatzszenario ab. Hier ein Überblick der vier relevanten Open Source Optionen für 2026:
Für Symfony Projekte existiert mit dem vairogs/spx-profiler Paket eine direkte Integration in den Symfony Web Profiler. Damit erscheinen SPX Metriken wie Wall Time, Memory Usage und Recorded Calls direkt im Symfony Debug Toolbar. Die Installation erfolgt über Composer und erfordert PHP 8.4 oder höher.
NCA Empfehlung: Für Entwicklungsumgebungen ist SPX die beste Wahl, weil es Profiling und Visualisierung in einem Werkzeug vereint. Für Produktivumgebungen mit hohem Traffic empfehlen wir eine Kombination aus Excimer für kontinuierliches Monitoring und SPX für gezielte Tiefenanalysen. Sprechen Sie uns an für eine individuelle Beratung: roland@nevercodealone.de oder rufen Sie an unter +49 176 24747727.
In Symfony Projekten lässt sich SPX über das Composer Paket vairogs/spx-profiler in den Symfony Web Profiler integrieren. Nach der Installation erscheint ein neuer Reiter im Debug Toolbar, der die wichtigsten SPX Metriken für jeden Request anzeigt. Die Konfiguration erfolgt über die Standard Symfony Bundle Registrierung.
composer require vairogs/spx-profiler
# config/packages/vairogs.yaml
vairogs:
components:
spx_profiler: ~
In Laravel Projekten mit Herd ist SPX bereits als bevorzugter Profiler vorinstalliert. Über die Herd Oberfläche oder den /herd-profiler Endpoint können Web Requests direkt im Browser analysiert werden. CLI Befehle lassen sich mit herd profile profilieren.
# Artisan Befehl profilieren
herd profile php artisan cache:clear
# Langlebige Prozesse mit periodischem Output
herd profile php artisan queue:work
Bei PHP-FPM Setups ist ein häufiger Stolperstein die fehlende Berechtigung für /proc/self. Da der FPM Master Prozess als root läuft, die Child Prozesse aber mit eingeschränkten Rechten, muss process.dumpable = yes in der Pool Konfiguration ergänzt werden. Ohne diese Einstellung können RSS und I/O Metriken nicht erfasst werden.
NCA unterstützt Teams bei der Integration von Profiling Tools in bestehende CI/CD Pipelines. Performance Regression Tests, automatisierte Profiling Reports und die richtige Konfiguration für verschiedene Umgebungen gehören zu unserem Consulting Portfolio.
Ein wesentlicher Vorteil von SPX gegenüber kommerziellen Profiling Diensten wie New Relic, Blackfire oder Datadog ist die vollständige Datensouveränität. Alle Profiling Daten verbleiben auf der eigenen Infrastruktur. Es werden keine Metriken, Call Stacks oder Anwendungsdetails an externe Server übermittelt.
Für Unternehmen in der EU, die unter der DSGVO arbeiten, bedeutet das: Kein Auftragsverarbeitungsvertrag mit einem SaaS Anbieter notwendig, keine Prüfung von Drittlandtransfers, keine Risikobewertung für Profiling Daten, die sensible Geschäftslogik offenlegen könnten. Gerade bei Anwendungen im Gesundheitswesen, Finanzsektor oder der öffentlichen Verwaltung ist diese Eigenschaft entscheidend.
NCA berät Unternehmen bei der Auswahl und Konfiguration DSGVO konformer Entwicklungswerkzeuge. Von der lokalen Profiling Infrastruktur über On Premise KI Modelle bis zur europäischen Cloud Strategie: Kontaktieren Sie uns für eine kostenlose Erstberatung unter roland@nevercodealone.de.
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
Anfrage-Konfiguration
Wähle die Expertise, die dein Projekt jetzt am dringendsten benötigt.
Die wichtigsten Fragen und Antworten rund um die SPX Profiling Extension für PHP Entwickler und DevOps Teams.
SPX (Simple Profiling eXtension) ist eine kostenlose, quelloffene PHP Extension für Performance Profiling. Sie analysiert Ausführungszeiten, Speicherverbrauch und I/O Operationen direkt auf der eigenen Infrastruktur und liefert Ergebnisse über eine integrierte Web UI mit Flamegraph, Timeline und Flat Profile Ansichten.
SPX unterstützt PHP Versionen von 5.6 bis 8.x auf Linux und macOS. Die Extension wird aus dem Quellcode kompiliert und benötigt die entsprechenden PHP Entwicklungspakete. ZTS (Thread Safe) Builds werden experimentell unterstützt, für Produktivumgebungen empfiehlt sich die NTS Variante.
Ja, SPX ist vollständig DSGVO konform, weil alle Profiling Daten lokal auf der eigenen Infrastruktur verbleiben. Es werden keine Metriken oder Anwendungsdetails an externe Server übertragen. Ein Auftragsverarbeitungsvertrag mit einem SaaS Anbieter ist nicht erforderlich.
SPX konzentriert sich auf Profiling mit integrierter Web UI, 22 Metriken und Overhead Korrektur. Xdebug bietet zusätzlich Debugging und Code Coverage, erzeugt aber Cachegrind Dateien, die externe Visualisierungstools benötigen. SPX hat in der Regel einen geringeren Performance Overhead als Xdebug im Profiling Modus.
SPX eignet sich primär für lokale Entwicklung und Staging Umgebungen. In CI/CD Pipelines können CLI Profiling Reports automatisiert erstellt werden, um Performance Regressionen zu erkennen. Für kontinuierliches Produktiv Monitoring empfiehlt sich eine Kombination mit Excimer oder Tideways.
Die Installation erfolgt über Quellcode Kompilierung: sudo apt install zlib1g-dev php-dev, dann git clone, phpize, configure, make und make install. Anschließend wird extension=spx.so in der php.ini aktiviert und die HTTP Schnittstelle über spx.http_enabled und spx.http_key konfiguriert.
Der Flamegraph visualisiert alle Funktionsaufrufe hierarchisch. Die Breite jedes Blocks entspricht der Ausführungszeit der jeweiligen Funktion. Hotspots sind sofort erkennbar, da besonders breite Blöcke auf zeitintensive Funktionen hinweisen. Die Farbgebung richtet sich nach den Kosten oder benutzerdefinierten Kategorien.
SPX unterstützt 22 Metriken, darunter Wall Time, CPU Time, Idle Time, Zend Engine Memory Usage, Memory Allocations, Memory Frees, RSS Memory, Object Count, File Count, I/O Read Bytes und I/O Write Bytes. Standardmäßig werden Wall Time und Zend Engine Memory erfasst, weitere Metriken können aktiviert werden.
Ja, Laravel Herd integriert SPX nativ als bevorzugten Profiler. Die Installation erfolgt über ein Installationsskript, das die Extension für alle vorhandenen PHP Versionen einrichtet. Web Requests können über die Herd Oberfläche profiliert werden, CLI Befehle über herd profile.
Mit dem Composer Paket vairogs/spx-profiler existiert eine direkte Integration in den Symfony Web Profiler. Das Paket zeigt SPX Metriken wie Wall Time, Memory Usage und Recorded Calls im Symfony Debug Toolbar an. Es erfordert PHP 8.4 oder höher und die installierte SPX Extension.
Für CLI Profiling wird die Umgebungsvariable SPX_ENABLED=1 vor dem PHP Befehl gesetzt, zum Beispiel SPX_ENABLED=1 php bin/console cache:clear. Der generierte Report wird automatisch gespeichert und kann über die Web UI analysiert werden. Mit Strg+C kann ein laufendes Profiling sauber beendet werden.
Im deaktivierten Zustand erzeugt SPX keinen messbaren Overhead auf NTS PHP Builds. Im aktivierten Zustand ist der Overhead geringer als bei Xdebug, da SPX eine eigene Overhead Korrektur durchführt. Diese subtrahiert die eigene Messzeit von den erfassten Funktionszeiten, was zu genaueren Ergebnissen führt.