많은 사람들이있는 PHP 스크립트를 SOAP을 통해 외부 리소스에서 가져 와서 수정 한 다음 다시 보냅니다. 세부 사항의 크기 때문에 나는 PHP의 메모리를 128MB로 올렸습니다. 약 4 시간 정도 달리면 (실행하는 데 4 일이 걸릴 것입니다) 메모리가 부족합니다. 그것이 무엇을의 Heres는 기초 : 그것은 메모리가 부족하고 추락가비지 컬렉터는 PHP에서 어떻게 작동합니까?
$people = getPeople();
foreach ($people as $person) {
$data = get_personal_data();
if ($data == "blah") {
importToPerson("blah", $person);
} else {
importToPerson("else", $person);
}
}
후 나는 데이터 foreach
루프 전에 $를 초기화하기로 결정하고 top
에 따라, 프로세스에 대한 메모리 사용량은 7.8 % 이상 상승하지 않은 12 시간 동안 뛰었 어.
내 질문은, 다시 사용할 경우에도 루프 안에 초기화 된 변수에 가비지 수집기가 실행되지 않는 것입니까? 시스템이 메모리를 회수하고 있으며 PHP가 아직 그것을 사용할 수있는 것으로 표시하지 않았고 결국 다시 충돌 할 것입니다 (이제는 256MB로 올렸으므로 2 가지를 수정 했으므로 확실하지 않습니다. 스크립트를 사용하면 답변을 얻을 수 있지만 나중에 12 시간 동안 기다려서 계산하지 못할 수도 있습니다.)
저는 Zend 프레임 워크를 사용하지 않으므로 다른 질문은 적합하지 않다고 생각합니다.
편집 : 실제로 스크립트 나 그 일에 어떤 문제가 없습니다. 현재 모든 시스템보고가 관련되어있는 한 어떤 문제도 없습니다. 이 질문은 가비지 수집기 및 foreach 루프에서 리소스를 회수하는 방법 및/또는 시스템에서 PHP 프로세스의 메모리 사용량을보고하는 방법에 대한 것입니다.
저는 왜 두 번 투표가 내려 졌는지 듣고 싶습니다. – Moses
'importToPerson()'은 어떻게됩니까? – PeeHaa
if ($ data == "blah") {'? ($ data = "blah") {if? – PeeHaa