Start · Sprachen · PHP · Referenz · xhprof_sample_disable

xhprof_sample_disable

Funktion

Stoppt den xhprof-Sample-Profiler und gibt die gesammelten Sample-Profiling-Daten als Array zurück.

seit PHP 0.9.2 Kategorie: misc

Signatur

xhprof_sample_disable(): array

Beschreibung

xhprof_sample_disable() beendet eine zuvor mit xhprof_sample_enable() gestartete Sample-Profiling-Sitzung und liefert die aufgezeichneten Stichprobendaten zurück. Im Gegensatz zum vollständigen Profiler (xhprof_disable()) verwendet das Sample-Profiling einen zeitbasierten Ansatz: In festgelegten Intervallen (standardmäßig alle 0,1 Sekunden) wird ein Schnappschuss des aktuellen Aufruf-Stacks aufgezeichnet.

Die zurückgegebenen Daten sind ein assoziatives Array, dessen Schlüssel Zeitstempel (in Mikrosekunden seit dem Unix-Epoch) sind und dessen Werte die zu diesem Zeitpunkt aktiven Funktionen im Call-Stack repräsentieren. Dieser statistische Ansatz eignet sich besonders gut für lang laufende Skripte oder Produktionsumgebungen, da der Overhead deutlich geringer ist als beim vollständigen Tracing-Profiler.

Die gesammelten Daten können anschließend mit den xhprof-Visualisierungstools (z. B. dem mitgelieferten UI) analysiert und grafisch dargestellt werden. Es empfiehlt sich, die Daten zu serialisieren und in einer Datei oder Datenbank zu speichern, um sie nachträglich auswerten zu können.

Rückgabewert

Typ
array
Beschreibung
Gibt ein assoziatives Array mit den Sample-Profiling-Daten zurück. Die Schlüssel sind Unix-Zeitstempel in Mikrosekunden, die Werte enthalten die jeweils aktiven Funktionen im Aufruf-Stack zum Zeitpunkt der Stichprobe.

Beispiele

Einfache Sample-Profiling-Sitzung

<?php
// Sample-Profiler starten
xhprof_sample_enable();

// Zu profilierender Code
for ($i = 0; $i < 100000; $i++) {
    $sum = array_sum(range(1, 100));
}

// Profiler stoppen und Daten abrufen
$sampleData = xhprof_sample_disable();

// Ergebnisse ausgeben
foreach ($sampleData as $timestamp => $callStack) {
    echo "Zeitstempel: $timestamp => Funktion: $callStack\n";
}
Zeitstempel: 1700000000100000 => Funktion: range Zeitstempel: 1700000000200000 => Funktion: array_sum ...

Profiling-Daten speichern und mit xhprof-UI analysieren

<?php
$xhprofRoot = '/var/www/xhprof';
include_once $xhprofRoot . '/xhprof_lib/utils/xhprof_lib.php';
include_once $xhprofRoot . '/xhprof_lib/utils/xhprof_runs.php';

// Sample-Profiler starten
xhprof_sample_enable();

// Anwendungscode
require_once 'myapp/bootstrap.php';
MyApp::run();

// Profiler stoppen
$sampleData = xhprof_sample_disable();

// Daten speichern
$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($sampleData, 'myapp_sample');

echo "Profiling-Run-ID: $runId\n";
echo "Analyse: http://example.com/xhprof_html/index.php?run=$runId&source=myapp_sample\n";
Profiling-Run-ID: 65a3f1b2c4d5e Analyse: http://example.com/xhprof_html/index.php?run=65a3f1b2c4d5e&source=myapp_sample

// Wichtig · Fallstricke

Voraussetzung: Die xhprof-Erweiterung muss installiert und in der php.ini aktiviert sein (extension=xhprof.so). Die Erweiterung ist nicht Teil der PHP-Standarddistribution und muss über PECL installiert werden.

Sampling-Intervall: Das Standard-Sampling-Intervall beträgt 100.000 Mikrosekunden (0,1 Sekunden) und kann über die INI-Direktive xhprof.sampling_interval angepasst werden. Ein kleineres Intervall liefert mehr Datenpunkte, erhöht aber den Overhead.

Produktionseinsatz: Im Gegensatz zu xhprof_disable() ist der Sample-Profiler für den gelegentlichen Einsatz in Produktionsumgebungen geeignet, da der Overhead deutlich geringer ist. Dennoch sollte er nicht dauerhaft aktiviert bleiben.

Achtung: Wird xhprof_sample_disable() aufgerufen, ohne dass zuvor xhprof_sample_enable() aufgerufen wurde, gibt die Funktion ein leeres Array zurück und erzeugt ggf. eine PHP-Warnung.