Start · Sprachen · PHP · Referenz · memory_get_usage

memory_get_usage

Funktion

Gibt die vom PHP-Skript aktuell belegte Speichermenge in Bytes zurück.

seit PHP 4.3.2 Kategorie: misc

Signatur

memory_get_usage(bool $real_usage = false): int

Beschreibung

memory_get_usage() liefert den aktuell vom PHP-Skript verbrauchten Arbeitsspeicher in Bytes. Diese Information ist nützlich, um Speicherlecks aufzuspüren, speicherintensive Code-Abschnitte zu identifizieren oder sicherzustellen, dass ein Skript das konfigurierte memory_limit nicht überschreitet.

Standardmäßig gibt die Funktion den vom PHP-Speichermanager tatsächlich genutzten Speicher zurück (also nur die wirklich belegten Bytes). Wird der Parameter real_usage auf true gesetzt, liefert die Funktion stattdessen den vom Betriebssystem für PHP angeforderten (reservierten) Gesamtspeicher, der typischerweise größer ist, da PHP Speicher in Blöcken vom OS anfordert.

Die Funktion eignet sich hervorragend für Profiling-Zwecke: Man misst den Speicherbedarf vor und nach einem Codeabschnitt und berechnet die Differenz. Für den höchsten während der Laufzeit erreichten Wert sollte man stattdessen memory_get_peak_usage() verwenden.

Die zurückgegebene Zahl kann mit einer einfachen Rechnung in lesbare Einheiten wie Kilobyte oder Megabyte umgerechnet werden.

Parameter

Name Typ Default Beschreibung
$real_usage bool false Wenn true, wird der vom Betriebssystem reservierte Gesamtspeicher zurückgegeben. Bei false (Standard) wird nur der tatsächlich vom PHP-Speichermanager genutzte Speicher zurückgegeben.

Rückgabewert

Typ
int
Beschreibung
Die aktuell vom Skript belegte Speichermenge in Bytes als int. Bei real_usage = true ist dies der vom Betriebssystem reservierte Speicher, bei false der intern genutzte Speicher.

Beispiele

Einfache Speichernutzung ausgeben

<?php
$bytes = memory_get_usage();
$kilobytes = round($bytes / 1024, 2);
$megabytes = round($bytes / 1024 / 1024, 2);

echo "Speicherbedarf: {$bytes} Bytes\n";
echo "Speicherbedarf: {$kilobytes} KB\n";
echo "Speicherbedarf: {$megabytes} MB\n";
Speicherbedarf: 524288 Bytes Speicherbedarf: 512 KB Speicherbedarf: 0.5 MB

Speicherverbrauch eines Code-Abschnitts messen

<?php
$vorher = memory_get_usage();

// Speicherintensiver Code-Abschnitt
$daten = [];
for ($i = 0; $i < 100000; $i++) {
    $daten[] = str_repeat('x', 100);
}

$nachher = memory_get_usage();
$differenz = $nachher - $vorher;

echo "Speicher vor der Operation:  " . number_format($vorher) . " Bytes\n";
echo "Speicher nach der Operation: " . number_format($nachher) . " Bytes\n";
echo "Differenz:                   " . number_format($differenz) . " Bytes (" . round($differenz / 1024 / 1024, 2) . " MB)\n";
Speicher vor der Operation: 534288 Bytes Speicher nach der Operation: 15847232 Bytes Differenz: 15312944 Bytes (14.6 MB)

Vergleich von real_usage true vs. false

<?php
$genutzt    = memory_get_usage(false);
$reserviert = memory_get_usage(true);

echo "Tatsächlich genutzt:    " . number_format($genutzt) . " Bytes\n";
echo "Vom OS reserviert:      " . number_format($reserviert) . " Bytes\n";
echo "Overhead (Reservierung): " . number_format($reserviert - $genutzt) . " Bytes\n";
Tatsächlich genutzt: 534288 Bytes Vom OS reserviert: 2097152 Bytes Overhead (Reservierung): 1562864 Bytes

// Wichtig · Fallstricke

Konfiguration beachten: Das PHP-Speicherlimit wird in der php.ini über die Direktive memory_limit gesteuert. Wenn ein Skript dieses Limit überschreitet, bricht PHP mit einem Fatal error: Allowed memory size exhausted ab. memory_get_usage() kann proaktiv genutzt werden, um dem entgegenzuwirken.

Unterschied zu memory_get_peak_usage(): memory_get_usage() liefert immer den aktuellen Wert zum Zeitpunkt des Aufrufs. Wenn zuvor allozierter Speicher freigegeben wurde, kann dieser Wert niedriger sein als das bisherige Maximum. Für den Höchstwert seit Skriptstart sollte memory_get_peak_usage() verwendet werden.

Plattformabhängigkeit: Die genauen Werte können je nach Betriebssystem und PHP-Build leicht variieren, da die interne Speicherverwaltung von PHP plattformabhängig ist.