Start · Sprachen · PHP · Referenz · xhprof_enable

xhprof_enable

Funktion

Startet den XHProf-Profiler und beginnt mit der Aufzeichnung von Laufzeit- und Aufrufstatistiken der aktuellen PHP-Ausführung.

seit PHP 0.9.2 Kategorie: misc

Signatur

xhprof_enable(int $flags = 0, array $options = []): void

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

Typ
void
Beschreibung
Diese Funktion gibt keinen Wert zurück. Die gesammelten Profiling-Daten werden erst nach dem Aufruf von 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);
Array ( [main()==>berechneSumme] => Array ( [ct] => 1 [wt] => 42 ) [main()] => Array ( [ct] => 1 [wt] => 105 ) )

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;
Profiling abgeschlossen. Run-ID: 64f3a1b2c8e9f

// 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.