Есть ли способ получить размер переменной PHP в байтах? - PullRequest
13 голосов
/ 03 ноября 2010

В настоящее время у меня есть PHP CLI-скрипт, широко использующий Zend Framework, который, кажется, использует все больший объем памяти во время работы. Он просматривает большой набор моделей, извлеченных из базы данных партиями по 1000. Вызовы memory_get_usage() показывают, что использование скрипта в памяти постоянно увеличивается.

Это несмотря на то, что я проверяю, что я сбрасываю модель после каждой итерации, и фактически использую array_shift(), чтобы уменьшить размер массива моделей на каждой итерации.

У меня такой вопрос, есть ли в PHP способ определения размера переменной в памяти, чтобы я мог отслеживать, что растет?

Ответы [ 4 ]

4 голосов
/ 03 ноября 2010

У меня нет решения проверить размер каждой переменной, но если вы используете доктрина , это, вероятно, причина

вам нужно использовать

   $Elem->free(true);

другое дело - обновить до 5.3 (если вы еще этого не делаете), сборщик мусора из 5.3 лучше

3 голосов
/ 03 ноября 2010

Нет.Вероятно, вы ищете память, которая не была освобождена, например, вы отсоединили переменную или удалили ссылку, а сборщик мусора еще не освободил связанный блок в памяти.

Вы можете попробовать ZendСервер 5 (вам нужна коммерческая версия) для создания профиля вашего приложения.Он имеет код трассировки .Я не знаю, позволит ли это обнаружить утечки памяти.

Также см .:

0 голосов
/ 30 марта 2011

Я не знаю, насколько это точно, но я получил число с помощью apc_add('variable_name', $var);.Затем я захожу в свой apc.php под записями кэша пользователя и просматриваю столбец размера.

Конечно, чтобы это работало, вам нужно установить и запустить APC.: -)

0 голосов
/ 03 ноября 2010

Вот фрагмент кода, который я нашел на 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;
}
?>

Получает размер заданного массива в байтах. Это то, что вы имели в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...