我正在开发一个CRON作业,它调用一个PHP脚本,它使用循环执行大量数据库工作.
当我限制数据集时它会正确执行,但是当我针对完整数据集运行它时,脚本会出错并显示一条消息:
Killed
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我从来没有见过这个通用的Killed错误信息,我想知道导致它被杀的原因是什么?
Ste*_*sen 70
您可能会触发Linux内存不足(OOM)杀手.检查dmesg有关它的消息.它说当发生这种情况时哪个进程被杀死了.
Eri*_*ski 16
重现此Killed错误的简单方法:
我能够重现这个错误Ubuntu 12.10有PHP 5.3.10.
创建一个名为的PHP脚本m.php并保存:
<?php
function repeat(){
repeat();
}
repeat();
?>
Run Code Online (Sandbox Code Playgroud)
运行:
el@apollo:~/foo$ php m.php
Killed
Run Code Online (Sandbox Code Playgroud)
程序占用100%CPU约15秒,然后暂停Killed消息.看看dmesg | grep php并有线索:
el@apollo:~/foo$ dmesg | grep php
[2387779.707894] Out of memory: Kill process 2114 (php) score 868 or
sacrifice child
Run Code Online (Sandbox Code Playgroud)
所以在我的情况下,PHP程序停止并打印"Killed",因为它由于无限循环而耗尽内存.
解决方案:
| 归档时间: |
|
| 查看次数: |
21893 次 |
| 最近记录: |