programing

PHP 스크립트의 일반 "Kilted" 오류

javaba 2022. 11. 26. 22:01
반응형

PHP 스크립트의 일반 "Kilted" 오류

저는 루프를 사용하여 많은 데이터베이스 작업을 수행하는 PHP 스크립트를 호출하는 CRON 작업을 수행하고 있습니다.

데이터 세트를 제한하면 정상적으로 실행되지만 전체 데이터 세트에 대해 실행하면 스크립트에 오류가 발생하여 다음 메시지가 나타납니다.

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;
    }
}

출력은 다음과 같습니다.

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에러 메세지가 표시됩니다만, 무엇이 원인으로 에러가 발생했는지 궁금하네요.

Linux OOM(Out-of-Memory) 킬러를 트리거하고 있을 수 있습니다.확인.dmesg메시지를 남겨주세요.이런 일이 일어날 때 어떤 과정이 죽었는지 알려준다.

간단한 재현 방법Killed에러:

이 에러를 재현할 수 있었습니다.Ubuntu 12.10와 함께PHP 5.3.10.

다음과 같은 PHP 스크립트를 만듭니다.m.php저장:

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

실행:

el@apollo:~/foo$ php m.php
Killed

이 프로그램은 CPU를 약 15초간 100% 사용하고 나서, 에 의해 정지합니다.Killed메세지.보다dmesg | grep php단서가 있습니다.

el@apollo:~/foo$ dmesg | grep php
[2387779.707894] Out of memory: Kill process 2114 (php) score 868 or 
sacrifice child

그래서 내 경우 무한 루프 때문에 메모리가 부족하여 PHP 프로그램이 중지되고 "Killed"라고 인쇄되었습니다.

솔루션:

  1. 이 PHP 프로그램에서 사용할 수 있는 RAM 용량 또는 메모리 양을 늘립니다.
  2. 문제를 순차적으로 작동하는 작은 덩어리로 나눕니다.
  3. 메모리 요건이 작거나 재귀에 영향을 받지 않도록 프로그램을 다시 작성합니다.

CloudLinux, PHP 7.1의 경우, 두 프로세스가 잠금 없이 동일한 파일을 읽고 쓸 때 발생했습니다.

언급URL : https://stackoverflow.com/questions/952868/generic-killed-error-in-php-script

반응형