Start · Sprachen · PHP · Referenz · xhprof_sample_enable

xhprof_sample_enable

Funktion

Startet das XHProf-Profiling im Sampling-Modus und sammelt periodische Stichproben des Call-Stacks.

seit PHP 0.9.2 Kategorie: misc

Signatur

xhprof_sample_enable(): void

Beschreibung

xhprof_sample_enable() aktiviert das XHProf-Profiling in einem leichtgewichtigen Sampling-Modus. Anstatt jeden einzelnen Funktionsaufruf zu verfolgen (wie beim vollständigen Profiling mit xhprof_enable()), werden hier in regelmäßigen Zeitabständen Stichproben (Samples) des aktuellen Call-Stacks gesammelt. Standardmäßig erfolgt dies alle 0,1 Millisekunden (100 µs).

Dieser Modus ist besonders nützlich für Produktionsumgebungen, da der Overhead deutlich geringer ist als beim vollständigen Profiling. Er eignet sich ideal, um Performanceflaschenhälse in stark ausgelasteten Anwendungen zu identifizieren, ohne die Antwortzeiten merklich zu beeinflussen.

Das Sampling wird mit xhprof_sample_disable() beendet, welche die gesammelten Daten als assoziatives Array zurückgibt. Jeder Eintrag im Ergebnis-Array enthält einen Zeitstempel als Schlüssel und den zugehörigen Call-Stack als Wert.

Beachte, dass xhprof_sample_enable() und xhprof_enable() nicht gleichzeitig aktiv sein sollten, da dies zu undefiniertem Verhalten führen kann.

Rückgabewert

Typ
void
Beschreibung
Diese Funktion gibt keinen Wert zurück. Sie startet lediglich den Sampling-Profiler im Hintergrund.

Beispiele

Einfaches Sampling-Profiling einer PHP-Anwendung

<?php
// Sampling-Profiling starten
xhprof_sample_enable();

// Zu analysierender Code
function berechneEtwas(int $n): int {
    $summe = 0;
    for ($i = 0; $i < $n; $i++) {
        $summe += $i;
    }
    return $summe;
}

berechneEtwas(100000);
sleep(1); // Simuliert weiteren App-Code

// Sampling beenden und Daten abrufen
$samplingDaten = xhprof_sample_disable();

// Anzahl der gesammelten Samples ausgeben
echo 'Anzahl Samples: ' . count($samplingDaten) . PHP_EOL;

// Ersten Sample-Eintrag anzeigen
if (!empty($samplingDaten)) {
    $ersterKey = array_key_first($samplingDaten);
    echo 'Zeitstempel: ' . $ersterKey . PHP_EOL;
    echo 'Call-Stack: ' . $samplingDaten[$ersterKey] . PHP_EOL;
}
Anzahl Samples: 10 Zeitstempel: 1698765432.123456 Call-Stack: main()==>berechneEtwas

Sampling-Profiling mit Speicherung der Ergebnisse in einer Datei

<?php
// Sampling starten
xhprof_sample_enable();

// Beispiel-Applikationslogik
function ladeBenutzer(int $id): array {
    // Simulierte Datenbankabfrage
    usleep(50000);
    return ['id' => $id, 'name' => 'Max Mustermann'];
}

for ($i = 1; $i <= 5; $i++) {
    ladeBenutzer($i);
}

// Sampling beenden
$samplingDaten = xhprof_sample_disable();

// Ergebnisse in eine Datei serialisieren
$ausgabePfad = sys_get_temp_dir() . '/xhprof_sample_' . uniqid() . '.json';
file_put_contents($ausgabePfad, json_encode($samplingDaten, JSON_PRETTY_PRINT));

echo 'Profiling-Daten gespeichert unter: ' . $ausgabePfad . PHP_EOL;
echo 'Gesammelte Samples: ' . count($samplingDaten) . PHP_EOL;
Profiling-Daten gespeichert unter: /tmp/xhprof_sample_5f3a2b1c4e.json Gesammelte Samples: 3

// Wichtig · Fallstricke

Erweiterung erforderlich: xhprof_sample_enable() ist Teil der xhprof-PECL-Erweiterung und steht nicht standardmäßig zur Verfügung. Die Erweiterung muss installiert und in der php.ini aktiviert sein (extension=xhprof.so).

Produktionseinsatz: Obwohl der Sampling-Modus wesentlich leichter als das vollständige Profiling ist, sollte er dennoch mit Bedacht eingesetzt werden. Ein dauerhaft aktiver Profiler kann auch im Sampling-Modus die Performance messbar beeinflussen.

Kompatibilität: Die XHProf-Erweiterung war ursprünglich für PHP 5 entwickelt worden. Für PHP 7 und PHP 8 sollte die Variante tideways/xhprof oder ähnliche Community-Forks verwendet werden, da die ursprüngliche PECL-Erweiterung nicht aktiv weiterentwickelt wird.

Kein gleichzeitiges Profiling: xhprof_sample_enable() und xhprof_enable() sollten nicht gleichzeitig aufgerufen werden, da dies zu unvorhersehbarem Verhalten führen kann.