我在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
你可以帮帮我吗?答案 0 :(得分:0)
我要做的第一件事就是确保在完成php.ini更改后重新启动Web服务器。
如果这不起作用,那么试试这个:
确保您正在写入正确的php.ini文件。制作一个info.php文件并确保写入正确的文件。
在for循环的底部执行:
未设置($曲线图); 未设置($数据);
这些似乎是最大的变量,并且显然是在积累数据而不被垃圾收集器拾取。
答案 1 :(得分:0)
PHP unset只删除对象的引用,它不会清除内部对象的内存分配,所以在每次创建大对象的迭代过程中都会创建对象的destroy函数并在该函数中取消每个使用的类变量,那么只有解开主对象才能释放它所占据的整个内存..希望这个事实可以帮助任何人