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