我一直看到内存耗尽错误
PHP 致命错误:允许的内存大小 268 435 456 字节已耗尽
在我的日志文件中。
即使服务器负载非常轻且在本地主机上不可重现,此错误也会随机出现。我有一个来自主机的 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 条记录。我在函数内部的 while 循环中得到内存耗尽错误func_select_array。我无法想象这个查询需要 256M+。这似乎不是 php 问题,而是 mysql 中的某些问题。请帮忙...
内存耗尽可能很难调试,因为错误只告诉您内存最终用完的位置,而不是大部分内存的使用位置。
您可以使用内存分析器(例如 Xdebug 中的性能分析器)来查找所有内存的去向。
你应该使用 EXPLAIN 来查询。为了确保您不会进行一些繁重的查询(乍一看似乎没有)。
第二种方式,可能是你得到一些太重的 BLOB ot 文本字段。不是在你当地的,这就是为什么你无法在当地环境中得到这个。
确保您不会得到无限循环。可能是?
使用跟踪 php 错误并尝试/捕获此块以获取有关错误的更好信息。
try {
while ($row=mysql_fetch_assoc($qry_result))
{
$data[$i] = $row;
$i++;
}
} catch (Exception $e) {
debug_print_backtrace();
var_dump($e->getMessage());
}