我一直看到内存耗尽错误
PHP致命错误:允许的内存大小为268 435 456字节耗尽
在我的日志文件中。
即使服务器负载很轻,也会随机出现此错误。在localhost上不可重现。我有一个来自hostgator的VPS 4服务器,负载为MB。 php配置允许高达256 Mb。
代码在
之下function func_select_array($qry)
{
$i=0;
$data=array();
$qry_result=mysql_query($qry);
if($qry_result)
{
while ($row=mysql_fetch_assoc($qry_result))
{
$data[$i] = $row;
$i++;
}
return $data;
}
else
{
return 2;
}
}
function func_check_rule_out_bid($auc_id,$bid_amount,$return_freq,$recheck)
{
$bid_qry="select * from tbl_bid where ubaid='".$auc_id."' and ubf='1' order by uba desc limit 0,10";
$bid_array=func_select_array($bid_qry);
}
表tbl_bid有2800条记录。 我在func_select_array函数内的while循环中出现内存耗尽错误。 我无法想象这个查询需要256M +。它似乎不是一个PHP问题,但在mysql中的东西。请帮忙......
答案 0 :(得分:1)
内存耗尽可能非常难以调试,因为错误只会告诉您内存最终耗尽的位置,而不是大部分内存的使用位置。
您可以使用内存分析器(例如Xdebug中的内存分析器)来查找所有内存的去向。
答案 1 :(得分:0)
您应该使用EXPLAIN进行查询。为了确保你没有做一些沉重的查询(起初看起来似乎没有)。
第二种方式,可能是你得到了一些太重的BLOB ot TEXT字段。不是在当地,这就是为什么你无法在当地环境中获得这个。
确保您没有获得infinte循环。可能是吗?
使用跟踪php错误并尝试/捕获此块以获取有关错误的更好信息。
try {
while ($row=mysql_fetch_assoc($qry_result))
{
$data[$i] = $row;
$i++;
}
} catch (Exception $e) {
debug_print_backtrace();
var_dump($e->getMessage());
}