Signatur
Beschreibung
xhprof_enable() aktiviert den XHProf-Profiler für den laufenden PHP-Prozess. Ab dem Aufruf dieser Funktion werden Informationen wie Ausführungszeiten, CPU-Zeiten und Speicherverbrauch für jeden Funktionsaufruf gesammelt. Die Aufzeichnung wird mit xhprof_disable() beendet, welche die gesammelten Daten als Array zurückgibt.
XHProf ist ein hierarchischer Profiler, der ursprünglich von Facebook entwickelt wurde. Er eignet sich besonders für die Analyse von Performance-Engpässen in Produktivumgebungen, da der Overhead im Vergleich zu anderen Profilern wie Xdebug gering ist.
Über den Parameter flags lassen sich erweiterte Metriken aktivieren, z. B. CPU-Zeit (XHPROF_FLAGS_CPU) oder Speicherverbrauch (XHPROF_FLAGS_MEMORY). Diese Flags können mit dem bitweisen OR-Operator kombiniert werden. Standardmäßig werden nur Wall-Clock-Zeiten und die Anzahl der Aufrufe gemessen.
Über den optionalen Parameter options kann z. B. mit dem Schlüssel ignored_functions ein Array von Funktionsnamen übergeben werden, die beim Profiling ausgelassen werden sollen, um das Ergebnis übersichtlicher zu halten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $flags | int | 0 | Bitmaske zur Aktivierung optionaler Metriken. Mögliche Werte: XHPROF_FLAGS_NO_BUILTINS (interne PHP-Funktionen ignorieren), XHPROF_FLAGS_CPU (CPU-Zeit messen), XHPROF_FLAGS_MEMORY (Speicherverbrauch messen). Flags können per | kombiniert werden. |
| $options | array | [] | Optionales assoziatives Array mit weiteren Einstellungen. Unterstützter Schlüssel: ignored_functions — ein Array von Funktionsnamen (als Strings), die vom Profiler nicht erfasst werden sollen. |
Rückgabewert
xhprof_disable() als Array zurückgegeben.Beispiele
Einfaches Profiling mit anschließender Ausgabe
<?php
// Profiler starten
xhprof_enable();
// Zu profilierender Code
function berechneSumme(int $n): int {
$summe = 0;
for ($i = 1; $i <= $n; $i++) {
$summe += $i;
}
return $summe;
}
$ergebnis = berechneSumme(1000);
// Profiler stoppen und Daten abrufen
$profilingDaten = xhprof_disable();
// Profiling-Ergebnisse anzeigen
print_r($profilingDaten);
Profiling mit CPU- und Speichermessung sowie ignorierten Funktionen
<?php
// Profiler mit erweiterten Metriken starten
xhprof_enable(
XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY,
['ignored_functions' => ['array_map', 'array_filter']]
);
// Zu profilierender Code
$daten = range(1, 10000);
$gefiltert = array_filter($daten, fn($x) => $x % 2 === 0);
sort($gefiltert);
// Profiler stoppen
$profilingDaten = xhprof_disable();
// Daten in eine Datei speichern (typische Vorgehensweise)
$runId = uniqid();
$profDir = '/tmp/xhprof';
if (!is_dir($profDir)) {
mkdir($profDir, 0775, true);
}
file_put_contents(
$profDir . '/' . $runId . '.xhprof',
serialize($profilingDaten)
);
echo "Profiling abgeschlossen. Run-ID: " . $runId;
// Wichtig · Fallstricke
Erweiterung installieren: XHProf ist keine standardmäßig enthaltene PHP-Erweiterung und muss separat installiert werden (z. B. via PECL: pecl install xhprof). Alternativ existiert die Fork-Variante Tideways XHProf (tideways_xhprof), die aktiv gepflegt wird und PHP 7+ unterstützt.
Produktivumgebung: XHProf eignet sich grundsätzlich für den Einsatz in Produktivumgebungen, da der Overhead gering ist. Dennoch sollte das Profiling gezielt (z. B. nur für einen Bruchteil der Anfragen) aktiviert werden, um die Systemlast nicht unnötig zu erhöhen.
Verschachtelte Aufrufe: Verschachtelte oder mehrfache Aufrufe von xhprof_enable() ohne zwischenliegendes xhprof_disable() können zu unvorhersehbarem Verhalten führen. Stellen Sie sicher, dass das Profiling sauber gestartet und gestoppt wird.
Visualisierung: Die rohen Profiling-Daten lassen sich mit dem mitgelieferten XHProf-UI oder Tools wie XHProf.io oder Blackfire grafisch aufbereiten und auswerten.