2011-08-02 23 views
0
ini_set('memory_limit', '1G'); 
$gmworker= new GearmanWorker(); 
$gmworker->addServer(); 
$gmworker->addFunction("create_job_process", "worker_create_job"); 
$gmworker->setTimeout(-1); 

print "Waiting for job...\n"; 
while($gmworker->work()) 
{ 
    if ($gmworker->returnCode() != GEARMAN_SUCCESS) 
    { 
    echo "return_code: " . $gmworker->returnCode() . "\n"; 
    break; 
    } 
    if ($gmworker->returnCode() == GEARMAN_SUCCESS) 
    { 
    echo "success\n\n"; 
    break; 
    } 
    sleep(1); 
} 

當「成功」顯示在日誌中,我可以看到內存的使用越來越多,然後得到了錯誤:Gearman的PHP不退出和內存耗盡

PHP致命錯誤:用盡1073741824個字節允許內存大小(試圖分配24個字節)

+0

嗯,如果顯示成功消息,while循環將退出。那麼你爲什麼在標題中說它不會退出?你想要使用'die()'而不是break來使它在成功時退出。 – hakre

+0

我用break,exit,沒區別 –

+0

如果你回顯$ gmworker-> returnCode(),它在while循環中吐出了什麼值?有沒有可能mem漏洞在你的worker_create_job函數中? –

回答

1
if ($ret == GEARMAN_SUCCESS) 
    { 
    echo "success\n"; 
    //force to quit 
    exec("kill -9 ". getmypid()); 
    die(); 
    } 

最後添加了exec(「kill -9」。getmypid());停止這個過程。