php中的内存限制问题

时间:2011-06-01 09:16:24

标签: php memory 64-bit limit

我在php中有内存问题。我已将php.ini中的限制设置为512 M

/var/log/apache2/error.log的输出是:

  

PHP致命错误:允许的内存大小   耗尽了536870912个字节(试过   分配71个字节)   /var/www/phpgraphlib.php,第578行,

有趣的代码是:

 foreach ($saved_test_figurestoprint as $figuretoprint){
        if (strpos($obj[$figuretoprint],",") >0 ){
  $graphfilename= "graphfile".remove_invalid_chars_for_file($obj["_id"])."_".remove_invalid_chars_for_file($figuretoprint).".png" ;        
        $graph = new PHPGraphLib(1000,200,$graphfilename);
        $data = explode(',', $obj[$figuretoprint]); 
$graph->addData($data);
$graph->setTitle($figuretoprint);
$graph->setBars(false);
$graph->setLine(true);
$graph->setDataPoints(true);
$graph->setDataPointColor('maroon');
$graph->createGraph();
?> <td> <?  echo $figuretoprint ; ?></td> <td> <? 
echo <<<END
<imag src=$graphfilename>
END

?> </td></tr><tr><?
echo "</br></br>";
echo "used memory is ".memory_get_usage(true) . "\n";   

最新的输出是: 用过的内存是30408704

我正在使用64位ubuntu和php 5.3。 Linux mongo-db-server 2.6.35-28-generic#49-Ubuntu SMP Tue Mar 1 14:39:03 UTC 2011 x86_64 PHP Version 5.3.3-1ubuntu9.3 如果有&gt;则出现问题要绘制的40幅图像。

我认为新的内存限制未应用于服务器 我发现了这个bug http://bugs.php.net/52061 但仅限于内存限制&gt; 2GB

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

我要做的第一件事就是确保在完成php.ini更改后重新启动Web服务器。

如果这不起作用,那么试试这个:

  1. 确保您正在写入正确的php.ini文件。制作一个info.php文件并确保写入正确的文件。

  2. 在for循环的底部执行:

  3. 未设置($曲线图); 未设置($数据);

    这些似乎是最大的变量,并且显然是在积累数据而不被垃圾收集器拾取。

答案 1 :(得分:0)

PHP unset只删除对象的引用,它不会清除内部对象的内存分配,所以在每次创建大对象的迭代过程中都会创建对象的destroy函数并在该函数中取消每个使用的类变量,那么只有解开主对象才能释放它所占据的整个内存..希望这个事实可以帮助任何人