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

Fehlerbehebung zur Verhinderung eines Speicherüberlaufs im PHP-Prozess

藏色散人
Freigeben: 2023-04-08 22:50:01
nach vorne
2490 Leute haben es durchsucht

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
*/
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage