Jenerik "Killed"

2 Cevap php

Ben döngüler ile veritabanı bir sürü iş yapan bir PHP komut dosyası çağırır CRON iş üzerinde çalışıyorum.

Ben veri kümesini sınırlamak zaman doğru yürütür, ama ben bir mesaj ile tam veri seti, komut dosyası hataları dışarı karşı çalıştırdığınızda:

Killed

set_time_limit (0) 'dir ve memory_limit (-1)

Burada sürekli ölür kod bölümü:

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

Çıktı şuna benzer:

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

Ben bu genel Killed hata mesajı görmedim ve ben onu öldürdü neden olduğunu merak ediyorum?

2 Cevap

Sen Linux out-of-bellek (OOM) katili tetikleyici olabilir. dmesg Bu konuda mesajlar için kontrol edin. Bu ne zaman olur süreç öldürüldüğü diyor.

Simple way to reproduce this Killed hata:

PHP 5.3.10 ile Ubuntu 12.10 bu örnek yapıyorum:

m.php olarak adlandırılan bu PHP komut dosyası oluşturun ve kaydedin:

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

Çalıştırın:

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

Program daha sonra durur yaklaşık 15 saniye boyunca% 100 CPU alır. dmesg | grep php bakmak ve ipuçları vardır:

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

Yani benim durumumda, baskılı PHP programı "Killed" ve bu nedeniyle sonsuz bir döngü bellek bitti çünkü durduruldu.

Solutions:

  1. Mevcut RAM miktarını artırın.
  2. Sırayla çalışan küçük parçalar halinde ayarlamak sorunu yıkmak.
  3. Çok daha küçük bir bellek gereksinimleri vardır bu yüzden programı baştan.