2009-06-04 2 views
45

루프를 사용하여 많은 데이터베이스 작업을 수행하는 PHP 스크립트를 호출하는 CRON 작업을하고 있습니다. 내가 데이터 세트를 제한 할 때PHP 스크립트에서 일반적인 "Killed"오류가 발생했습니다.

그것은 제대로 실행,하지만 전체 데이터 세트에 대해 그것을 실행할 때, 메시지와 함께 스크립트 오류 아웃 : (

Killed 

하고 set_time_limit (0)이며, memory_limit를이 - 1) 여기서

가 지속적 다이 코드 섹션이다

echo "I'm in _getMemberDemographicAttrs\n"; 
if (! empty ($member_id)) { 
    $query .= ' AND member_id = ' . $member_id; 
} 

$result = mysql_query ($query, $this->_db); 
if ($result) { 
    while ($rule = mysql_fetch_assoc ($result)) { 
     $rules [] = $rule; 
    } 
    if (! empty ($rules)) { 
     mysql_free_result ($result); 
     echo "I'm leaving _getMemberDemographicAttrs\n"; 
     return $rules; 
    } 
} 

출력은 다음과 같다 : 012

I'm in _getMemberDemographicAttrs<br/> 
I'm leaving _getMemberDemographicAttrs<br/> 
I'm in _getMemberDemographicAttrs<br/> 
I'm leaving _getMemberDemographicAttrs<br/> 
I'm in _getMemberDemographicAttrs<br/> 
Killed 

이 일반 편지를 본 적이 없는데 Killed 오류 메시지가 표시되고 어떤 결과가 발생하는지 궁금합니다.

답변

62

Linux OOM (Out-of-Memory) 킬러가 실행 중일 수 있습니다. 그것에 관한 메시지는 dmesg을 확인하십시오. 어떤 일이 일어 났을 때 어떤 과정이 죽었는지 말합니다. 이 Killed 오류를 재현 할 수

+3

감사합니다.나는 리눅스가 그 과정을 죽이고있는 것을 발견했다. 필자는 스크립트에서 PHP에 대한 메모리 제한을 줄임으로써 해결했습니다. PHP에서 메모리를 다르게 관리하고 충돌을 피할 수있었습니다. – Fuser97381

+0

감사합니다. 내가 필요한 것. – marlar

+0

나를 위해, PHP 5.6에서 PHP 7로 업그레이드하면 문제가 해결되었습니다. 많은 요인에 따라 다르지만 PHP 7이 더 효율적으로 작동하므로 체크 아웃 할 가치가 있습니다. –

11

간단한 방법 :

나는 PHP 5.3.10Ubuntu 12.10에서이 오류를 재현 할 수 있었다.

m.php라는 PHP 스크립트를 만들고 저장 :

<?php 
    function repeat(){ 
     repeat(); 
    } 
    repeat(); 
?> 

실행을 :

[email protected]:~/foo$ php m.php 
Killed 

프로그램은 다음 약 15 초 동안 100 %의 CPU 걸리는 Killed 메시지와 함께 중단. dmesg | grep php을보고 단서가 있습니다 :

은 메모리가 부족하기 때문 "사망"
[email protected]:~/foo$ dmesg | grep php 
[2387779.707894] Out of memory: Kill process 2114 (php) score 868 or 
sacrifice child 

그래서 내 경우, PHP 프로그램이 중단 및 인쇄 인해 무한 루프가.

솔루션 :

  1. 이 PHP 프로그램에 사용 가능한 RAM 또는 사용 가능한 메모리의 양의 양을 늘립니다.
  2. 순차적으로 작동하는 작은 청크로 문제를 분류하십시오.
  3. 메모리 요구 사항이 적거나 재귀 적으로 복잡하지 않도록 프로그램을 다시 작성하십시오.

당신이 쓴 코드가이 오류의 원인이되는 당신이 붙어하고 그 일을 왜에 대한 손실을 느낄 경우이 문제를 다시

을 얻을하는 방법, 당신은에 필요한를 다시 방문 PHP 구조, 루프 및 재귀의 기본 핵심 동작 및 이러한 구조를 충족하기 위해 메모리가 할당되는 방식은 다음과 같습니다. http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

관련 문제