PHP致命错误:允许的内存大小为268435456字节

时间:2012-04-24 19:39:04

标签: php mysql fatal-error

我一直看到内存耗尽错误

  

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中的东西。请帮忙......

2 个答案:

答案 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());
}