Есть ли способ получить размер переменной PHP в байтах?
В настоящее время я использую PHP CLI script с помощью Zend Framework, который, как кажется, использует все больший объем памяти. Он перемещается по большому набору моделей, полученных из базы данных партиями 1000. Вызовы memory_get_usage()
показывают, что использование памяти script всегда увеличивается.
Это несмотря на то, что я отключил модель после каждой итерации и фактически использовал array_shift()
, чтобы уменьшить размер массива моделей на каждой итерации.
Мой вопрос в том, что в PHP есть способ обнаружить размер в памяти переменной, чтобы я мог отслеживать, что растет?
Ответы
Ответ 1
У меня нет решения для проверки размера каждой переменной, но если вы используете doctrine, это, вероятно, причина
вам нужно использовать
$Elem->free(true);
еще одна вещь - обновить до 5.3 (если вы еще этого не сделаете), лучше= "http://php.net/manual/en/features.gc.performance-considerations.php" rel= "nofollow" > сборщик мусора 5.3.
Ответ 2
Нет. Вероятно, вы ищете память, которая не освобождена, например. вы отсоединили переменную или удалили ссылку, а сборщик мусора еще не выпустили связанный блок в памяти.
Вы можете попробовать Zend Server 5 (вам нужна коммерческая версия) для mem-profile вашего приложения. Он отслеживание кода. Я не знаю, позволит ли это вам обнаружить утечки памяти.
Также смотрите:
Ответ 3
Я не знаю, насколько это точно, но я получил номер, используя apc_add('variable_name', $var);
. Затем я перехожу к apc.php
в записи пользовательского кэша и просматриваю столбец размера.
Конечно, для этого вам необходимо установить и запустить APC.: -)
Ответ 4
Вот фрагмент кода, который я нашел в 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;
}
?>
Он получает размер данного массива в байтах. Это то, что вы имели в виду?