Situation 1. Die Programmbetriebsdaten sind zu groß
Szenariowiederherstellung: Einmaliger Messwert überschreitet den oberen Wert Begrenzung des verfügbaren Speichers von PHP Die Daten verursachen Speichererschöpfung
Lösung:
<?php ini_set('memory_limit', '128M'); $string = str_pad('1', 128 * 1024 * 1024);
Fall 2, Eine Kopie wird generiert, wenn das Programm mit großen Datenmengen arbeitet
Szenariowiederherstellung: große Variablen Während der Ausführung wurde eine Kopie erstellt, was zu unzureichendem Speicher führte.<?php //php7 以下版本通过 composer 引入 paragonie/random_compat ,为了方便来生成一个随机名称的临时文件 require "vendor/autoload.php"; ini_set('memory_limit', '128M'); //生成临时文件存放大字符串 $fileName = 'tmp'.bin2hex(random_bytes(5)).'.txt'; touch($fileName); for ( $i = 0; $i < 128; $i++ ) { $string = str_pad('1', 1 * 1024 * 1024); file_put_contents($fileName, $string, FILE_APPEND); } $handle = fopen($fileName, "r"); for ( $i = 0; $i <= filesize($fileName) / 1 * 1024 * 1024; $i++ ) { //do something $string = fread($handle, 1 * 1024 * 1024); } fclose($handle); unlink($fileName);
Lösung:
Geben Sie nutzlose Variablen frühzeitig frei oder manipulieren Sie Originaldaten in Form von Referenzen.<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; $string2 .= '1';
Szenario drei, Irrationale Konfiguration und Erschöpfung der Systemressourcen
Szenariowiederherstellung: Unzureichender Speicher aufgrund unangemessener Konfiguration, 2G-Speichermaschine Die obige Einstellung kann bis zu 100 PHP-FPM-Unterprozesse starten, aber nachdem tatsächlich 50 PHP-FPM-Unterprozesse gestartet wurden, können keine weiteren Prozesse gestartet werden.Lösung:
Szenario 4. Unbrauchbare Daten werden nicht rechtzeitig freigegeben
Szenario-Wiederherstellung: Dieses Problem ist aus der Sicht nicht logisch Programmlogik Problem, aber nutzlose Daten beanspruchen viel Speicher und führen zu unzureichenden Ressourcen. Eine Codeoptimierung sollte angestrebt werden. Der folgende Code wird verwendet, um Datenbankoperationen in der Laravel-Entwicklung zu überwachen:<?php ini_set("memory_limit",'1M'); $string = str_pad('1', 1* 750 *1024); $string2 = $string; unset($string); $string2 .= '1';
Lösung:
Das obige ist der detaillierte Inhalt vonWas passiert, wenn PHP-Speicherlecks auftreten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!