【发布时间】:2010-10-31 11:20:35
【问题描述】:
我正在做一个调用 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 错误消息,我想知道是什么导致它被杀死?
【问题讨论】:
-
我刚刚在 PHP 7.4 上遇到了这个错误,罪魁祸首是一个匿名类,它覆盖了一个方法。我在父类的基方法中添加了一个参数,但在匿名子类中忘记了参数。由于某种原因,PHP 没有正确解析这个并占用内存,直到 OOM 杀手
Killed进程。将缺少的参数添加到 anon 类解决了这个问题。老实说,这听起来像是 PHP 中的一个错误。