В настоящее время у меня есть PHP CLI-скрипт с использованием Zend Framework, который, как кажется, использует все больший объем памяти. Он перемещается по большому набору моделей, полученных из базы данных в партиях по 1000. Вызовы memory_get_usage()
показывают, что использование памяти в скрипте всегда увеличивается.
Это несмотря на то, что я не могу отменить модель после каждой итерации и фактически использовать array_shift()
чтобы уменьшить размер массива моделей на каждой итерации.
Мой вопрос в том, что в PHP есть способ обнаружить размер в памяти переменной, чтобы я мог отслеживать, что растет?
У меня нет решения для проверки размера каждой переменной, но если вы используете доктрину, то это, вероятно, причина
вам нужно использовать
$Elem->free(true);
Другое дело – обновить до 5.3 (если вы еще этого не сделаете), сборщик мусора 5.3 лучше
Нет. Вероятно, вы ищете память, которая не освобождена, например, вы отсоединили переменную или удалили ссылку, а сборщик мусора еще не выпустил связанный блок в памяти.
Вы можете попробовать Zend Server 5 (вам нужна коммерческая версия) для mem-profile вашего приложения. Он имеет отслеживание кода . Я не знаю, может ли это позволить вам обнаружить утечки памяти.
Также см:
Я не знаю, насколько это точно, но я получил число, используя apc_add('variable_name', $var);
, Затем я apc.php
к apc.php
в записи пользовательского кэша и просматриваю столбец размера.
Разумеется, для этого вам необходимо установить и запустить APC. 🙂
Вот фрагмент кода, который я нашел в Weberdev
<?php function array_size($a){ $size = 0; while(list($k, $v) = each($a)){ $size += is_array($v) ? array_size($v) : strlen($v); } return $size; } ?>
Он получает размер данного массива в байтах. Это то, что вы имели в виду?