Is there a way I get the size of a PHP variable in bytes?
I currently h开发者_Go百科ave a PHP CLI script using Zend Framework extensively which seems to be using a ever larger amount of memory as it runs. It loops through a large set of models retrieved from a database in batches of 1000. Calls to memory_get_usage()
show that the memory usage of the script is always increasing.
This is despite making sure that I'm unsetting the model after every iteration and actually using array_shift()
to reduce the size of the array of models on every iteration.
My question is, in PHP is there a way of discovering the size-in-memory of a variable so I can track what's growing?
i don't have a solution to check the size of every variable, but if you use doctrine its probably the reason
you need to use
$Elem->free(true);
another thing is to upgrade to 5.3 (if you dont do it yet), the garbage collector of 5.3 is better
No. You are likely looking for memory that is not freed, e.g. you unlinked a variable or deleted a reference and the garbage collector did not yet release the associated block in memory.
You could try Zend Server 5 (you need the commercial version though) to mem-profile your application. It has code tracing. I dont know if this would allow you to spot memory leaks though.
Also see:
- What's new in PHP V5.2, Part 1: Using the new memory manager
- Memtrack (PECL)
I don't know how accurate it is, but I got a number by using apc_add('variable_name', $var);
. I then go to my apc.php
under user cache entries and look at the size column.
Of course for this to work you need to have APC installed and running. :-)
Here is a code snippet I found at 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;
}
?>
It gets the size of the given array in bytes. Is this what you meant?
精彩评论