Start · Sprachen · PHP · Referenz · apcu_sma_info

apcu_sma_info

Funktion

Gibt detaillierte Informationen zur APCu Shared-Memory-Allokation zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

apcu_sma_info(bool $limited = false): array|false

Beschreibung

apcu_sma_info() liefert Statistiken und Metadaten über den von APCu verwalteten Shared-Memory-Bereich. Damit lässt sich zur Laufzeit prüfen, wie viel Speicher belegt, frei oder fragmentiert ist – ein wichtiges Werkzeug für Performance-Monitoring und Kapazitätsplanung.

Das zurückgegebene Array enthält u. a. die Felder num_seg (Anzahl der Speichersegmente), seg_size (Größe jedes Segments in Bytes), avail_mem (freier Speicher in Bytes) sowie ein block_lists-Array, das die einzelnen freien und belegten Speicherblöcke beschreibt. Diese Blockdetails können bei großen Caches sehr umfangreich sein.

Mit dem Parameter $limited = true wird das block_lists-Array weggelassen. Das ist sinnvoll, wenn nur die Kennzahlen auf oberster Ebene benötigt werden und der Overhead durch das Traversieren aller Blöcke vermieden werden soll – etwa in Monitoring-Endpunkten, die häufig abgefragt werden.

Die Funktion ist ausschließlich über die APCu-Erweiterung (pecl/apcu) verfügbar und gibt false zurück, wenn APCu nicht aktiv ist oder kein Shared Memory initialisiert wurde.

Parameter

Name Typ Default Beschreibung
$limited bool false Ist true, wird das block_lists-Element aus dem Ergebnis-Array weggelassen, um den Overhead bei vielen Speicherblöcken zu reduzieren.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein assoziatives Array mit Shared-Memory-Statistiken (num_seg, seg_size, avail_mem, block_lists etc.). Gibt false zurück, wenn APCu nicht verfügbar oder nicht initialisiert ist.

Beispiele

Vollständige SMA-Informationen ausgeben

<?php
$info = apcu_sma_info();

if ($info === false) {
    echo 'APCu ist nicht verfügbar.';
} else {
    echo 'Segmente:        ' . $info['num_seg'] . PHP_EOL;
    echo 'Segmentgröße:    ' . number_format($info['seg_size'] / 1024 / 1024, 2) . ' MB' . PHP_EOL;
    echo 'Freier Speicher: ' . number_format($info['avail_mem'] / 1024 / 1024, 2) . ' MB' . PHP_EOL;
}
Segmente: 1 Segmentgröße: 32,00 MB Freier Speicher: 28,43 MB

Nur Kennzahlen ohne Blockdetails (Monitoring-Endpunkt)

<?php
// $limited = true vermeidet den Overhead durch block_lists
$info = apcu_sma_info(true);

if ($info !== false) {
    $usedPercent = round(
        (1 - $info['avail_mem'] / ($info['num_seg'] * $info['seg_size'])) * 100,
        1
    );
    echo 'APCu-Speichernutzung: ' . $usedPercent . ' %' . PHP_EOL;

    // block_lists ist NICHT vorhanden, da $limited = true
    var_dump(isset($info['block_lists'])); // bool(false)
}
APCu-Speichernutzung: 11,2 % bool(false)

// Wichtig · Fallstricke

CLI vs. Web: APCu verhält sich im CLI-Modus anders als im Web-SAPI. Standardmäßig ist APCu im CLI deaktiviert; zum Testen muss apc.enable_cli=1 in der php.ini gesetzt sein. Andernfalls gibt apcu_sma_info() im CLI immer false zurück.

Fragmentierung: Ein hoher Anteil kleiner freier Blöcke in block_lists deutet auf Fragmentierung hin. In solchen Fällen kann ein APCu-Neustart (z. B. per apcu_clear_cache()) oder eine Anpassung von apc.shm_size helfen.

Performance: Auf Systemen mit sehr vielen Cache-Einträgen kann das vollständige block_lists-Array sehr groß werden. Für häufig abgefragte Endpunkte sollte daher $limited = true verwendet werden.