Проблема с ограничением памяти в php - PullRequest
3 голосов
/ 01 июня 2011

У меня проблема с памятью в 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 Вторник, 1 марта 14:39:03 UTC 2011 x86_64 Версия PHP 5.3.3-1ubuntu9.3 проблема возникает, если есть> 40 изображений для рисования.

я думаю, что новый предел памяти не был применен к серверу я нашел эту ошибку http://bugs.php.net/52061 но только для ограничения памяти> 2 ГБ

Вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

PHP unset просто удаляет ссылку на объект и не очищает распределение внутренней памяти объекта, поэтому в итеративном процессе, когда вы каждый раз создаете большие объекты, затем выполняете функцию уничтожения вашего объекта и в этой функции сбрасываете каждый Используемые переменные класса, тогда только отключение основного объекта освободит всю занимаемую им память .. надеюсь, этот факт кому-нибудь поможет

0 голосов
/ 05 июня 2011

Первое, что я хотел бы сделать, это убедиться, что вы полностью перезагружаете свой веб-сервер после внесения изменений в php.ini.

Если это не сработает, попробуйте следующее:

  1. Убедитесь, что вы пишете в правильный файл php.ini. Создайте файл info.php и убедитесь, что вы пишете в правильный файл.

  2. В нижней части цикла for выполните:

задана ($ график); снята с охраны ($ данных);

Это, похоже, самые большие переменные, которые явно накапливают данные и не собираются сборщиком мусора.

...