Heim  >  Artikel  >  Backend-Entwicklung  >  Häufige Ursachen für einen PHP-Speicherüberlauf

Häufige Ursachen für einen PHP-Speicherüberlauf

(*-*)浩
(*-*)浩Original
2019-10-19 08:59:023350Durchsuche

Speicherüberlauf bedeutet, dass im Anwendungssystem nicht wiederherstellbarer Speicher vorhanden ist oder zu viel Speicher verwendet wird, was letztendlich dazu führt, dass der vom Programm für die Ausführung verwendete Speicher größer ist als der maximale Speicher, den die virtuelle Maschine bereitstellen kann.

Häufige Ursachen für einen PHP-Speicherüberlauf

Es gibt viele Gründe für einen Speicherüberlauf. Die häufigsten sind folgende:

Die in den Speicher geladene Datenmenge ist zu groß, z. B. das gleichzeitige Abrufen zu vieler Daten aus der Datenbank. (Empfohlenes Lernen: PHP-Video-Tutorial)

Es gibt Verweise auf Objekte in der Sammlungsklasse wird nach der Verwendung nicht gelöscht;

Es gibt eine Endlosschleife im Code oder die Schleife generiert zu viele doppelte Objektentitäten

FEHLER in der verwendeten Drittanbietersoftware; Der Startparameter-Speicherwert ist zu klein eingestellt;

Angenommen, die Anzahl der im Protokoll gespeicherten Datensätze beträgt 500.000, dann lautet die Lösung wie folgt:

ini_set( 'memory_limit','64M'); //Reset PHP kann verwendet werden. Die Speichergröße beträgt 64 MB. Im Allgemeinen kann die Datei php.ini nicht auf dem Remote-Host geändert werden und kann nur über das Programm festgelegt werden. Hinweis: Im Safe_mode (abgesicherter Modus) ist ini_set ungültig

set_time_limit(600);//设置超时限制为6分钟
$farr = $Uarr = $Marr = $IParr = $data = $_sub = array();
$spt = ”$@#!$”;
$root = ”/Data/webapps/VisitLog”;
$path = $dpath = $fpath = NULL;
$path = $root.”/”.date(“Y-m”,$timestamp);
$dpath = $path.”/”.date(“m-d”,$timestamp);
for($j=0;$j<24;$j++){
$v = ($j < 10) ? ”0″.$j : $j;
$gpath = $dpath.”/”.$v.”.php”;
if(!file_exists($gpath)){
continue;
} else {
$arr = file($gpath);////将文件读入数组中
array_shift($arr);//移出第一个单元-》<?php exit;?>
$farr = array_merge($farr,$arr);
unset($arr);
}
}
if(empty($this->farr)){
echo ”<p><center>没有相关记录!</center></p>”;
exit;
}
while(!empty($farr)){
$_sub = array_splice($farr, 0, 10000); //每次取出$farr中1000个
for($i=0,$scount=count($_sub);$i<$scount;$i++){
$arr = explode($spt,$_sub[$i]);
$Uarr[] = $arr[1]; //vurl
$Marr[] = $arr[2]; //vmark
$IParr[] = $arr[3].” |$nbsp;”.$arr[1]; //IP
}
unset($_sub);//用完及时销毁
}
unset($farr);

Hier ist es nicht schwer zu erkennen, dass wir einerseits die verfügbare Speichergröße von PHP erhöhen müssen Solange wir einen Weg finden, das Array in Stapeln zu verarbeiten, zu teilen und zu erobern, verwendete Variablen rechtzeitig zu zerstören (nicht zu setzen), wird es im Allgemeinen keine Überlaufprobleme geben.

Um den Speicherverbrauch des PHP-Programms zu senken, sollten wir außerdem die Verwendung statischer Variablen so weit wie möglich reduzieren. Wenn eine Wiederverwendung von Daten erforderlich ist, können Sie die Verwendung von Referenzen (&) in Betracht ziehen. Ein weiterer Punkt ist: Nach Abschluss der Datenbankoperation muss die Verbindung sofort geschlossen werden, nachdem ein Objekt verwendet wurde, und der Destruktor (__destruct()) muss umgehend aufgerufen werden.

Das obige ist der detaillierte Inhalt vonHäufige Ursachen für einen PHP-Speicherüberlauf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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