Heim  >  Artikel  >  Backend-Entwicklung  >  Fehlerbehebung zur Verhinderung eines Speicherüberlaufs im PHP-Prozess

Fehlerbehebung zur Verhinderung eines Speicherüberlaufs im PHP-Prozess

藏色散人
藏色散人nach vorne
2020-06-24 13:42:112396Durchsuche

Die Speichergröße des PHP-Prozesses kann in der Konfigurationsdatei memory_limit=128M

festgelegt werden das Programm ini_set('memory_limit', '1024M'); Stellen Sie es so ein: Es ist 1G. Dies ist jedoch in der Regel nicht so eingerichtet, da dies Auswirkungen auf andere Dienste der Maschine hat. Manchmal können Sie den Code überprüfen. Oft kommt es zu einem Speicherüberlauf, weil PHP-Variablen nicht rechtzeitig freigegeben werden oder wenn ein relativ großes Array durchlaufen wird.

1. Fehlerbehebung

memory_get_usage() PHP verfügt über diese Systemfunktion, um zu ermitteln, wie viel Speicherplatz vom aktuellen Prozess verwendet wird. Die zurückgegebene Einheit ist round(memory_get_usage()/1024/1024, 2).'MB', konvertiert in MB

und kann Speicheränderungen während der Codeausführung verfolgen.

2. Häufige Speicherüberlauffälle

Durchlaufen Sie ein großes Array und ändern Sie einige Werte des Arrays, was zu einer Kopie des Arrays während des Durchlaufvorgangs führt.

Das Merkmal von PHP-Variablen ist „Kopieren beim Schreiben“.

Wenn es um die Zuweisung eines $arr-Arrays geht, wird es aufgeteilt und eine neue HashTable-Struktur generiert, was zu einer Speichernutzung führt Um sich sofort zu ändern, verwenden Sie die Referenzdurchquerung

>
$arr = range(0, 599999);
echo &#39;foreach前内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
foreach($arr as $key => $item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo &#39;foreach中内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;
    }
}
echo &#39;foreach后内存:&#39;.round(memory_get_usage()/1024/1024, 2).&#39;MB&#39;, &#39;<br/>&#39;;

//输出
/*
foreach前内存:49.9MB
foreach中内存:81.36MB
foreach中内存:84.42MB
foreach中内存:87.47MB
foreach中内存:90.52MB
foreach中内存:93.57MB
foreach中内存:96.62MB
foreach后内存:49.9MB
*/
Denken Sie nach Abschluss des Durchlaufs daran, unset($key);unset($item); zu verwenden. Da $item eine Referenz auf das letzte Element des Arrays ist, wird diese Variable später direkt geändert in das Array geändert.

Empfohlen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonFehlerbehebung zur Verhinderung eines Speicherüberlaufs im PHP-Prozess. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen