PHP - How to track down a memory leak
I had to track down a bug in a PHP application. It was a long running maintenance script called from the command line. There was a memory leak and it was slowly growing in memory usage.
I created this little top level function:
$last_mem_usage = 0; function mem_print($line_num) { global $last_mem_usage; $total = intval(memory_get_usage()); print " at line $line_num we have used ".number_format(intval($total - $last_mem_usage)). " since last total=$total last=$last_mem_usage\n"; $last_mem_usage = $total; }
Call it like so:
mem_print(__LINE__);
If you suspect a certain function (or loop, or ...) of swollowing up your memory you can put it before or after the function call, like so:
mem_print(__LINE__); suspect_function(); mem_print(__LINE__);