|
Posted by Erwin Moller on 01/03/08 17:29
Mad Hatter wrote:
> Hi folks
>
> I have a script which reads the mysql database,does a lot of string
> manipulation then writes its output to a file. The manipulation is all done
> in a separate function which is called over and over again but with each
> time it's called it's not releasing the memory allocated from the last
> call. After a few Calls it's running out of memory. I'm using 'echo
> memory_get_usage()' to check the usage and unset(variable names) to try and
> free things up. Anyone tell me where I'm going wrong please.
Hard to tell based on this only.
A few ideas:
If your function finishes, you shouldn't unset anything used in that
function explicitly.
eg
function testmem(){
$IamOnlyHere = "blabla";
}
when you call testmem(), the variable $IamOnlyHere is only used during
your function, and is gone after the call.
Also the memory allocated is freed.
So no need to unset() it.
So my guess would be that you use some global variables or growing
variables in the scope of your script, like this (stupid example):
$IgetBig = "";
for ($i=0;$i<1000000;$i++){
$IgetBig .= getMore($i);
}
// probably never reach here, because out-of-memory
echo $IgetBig;
function getMore($number){
$returnThis = str_repeat("bla",$number);
}
In the above example $IgetBig is the variable that consumes all the
memory after a short while. Unsetting $returnThis in function getMore()
won't help.
Any chance some of the variables in the normal scope of the script are
growing too much? Or are you maybe using one of the superglobals to
store stuff, like $_SESSION?
If the above doesn't help you try something like this:
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
at some smart points in your script.
It produces all the variabels in use.
(Mind the $GLOBALS instead of the expected $_GLOBALS, expected by me at
least.)
Good luck with the bughunt.
Erwin Moller
Navigation:
[Reply to this message]
|