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