Signatur
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
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;
}
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;
// 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.