메모리 오버플로는 응용 프로그램 시스템에 복구할 수 없는 메모리가 있거나 너무 많은 메모리가 사용되어 궁극적으로 프로그램에서 사용하는 메모리가 가상 머신이 제공할 수 있는 최대 메모리보다 크게 실행되는 것을 의미합니다.
메모리 오버플로에는 여러 가지 이유가 있으며 일반적인 이유는 다음과 같습니다.
#🎜 🎜 #데이터베이스에서 한 번에 너무 많은 데이터를 가져오는 등 메모리에 로드된 데이터의 양이 너무 많습니다. (권장 학습:PHP 비디오 튜토리얼)
컬렉션 클래스에 개체 쌍이 있습니다. 사용 후 참조가 지워지지 않습니다. 코드에 무한 루프가 있거나 루프가 너무 많은 중복 개체 엔터티를 생성합니다. #사용된 타사 소프트웨어의 버그;# 🎜🎜#시작 매개변수 메모리 값이 너무 작게 설정되었습니다.
로그에 저장된 레코드 수가 있다고 가정합니다. 500,000이면 해결 방법은 다음과 같습니다.# 🎜🎜#
ini_set('memory_limit','64M'); //php가 사용할 수 있는 메모리 크기를 64M으로 재설정합니다. ini 파일은 원격 호스트에서 수정할 수 없으며 프로그램을 통해서만 설정할 수 있습니다. 참고: safe_mode(안전 모드)에서는 ini_set이 유효하지 않습니다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);
위 내용은 PHP 메모리 오버플로의 일반적인 원인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!