I've got a variable $dom that contains an instance of PHP's DOMDocument. This variable is being set and unset within a loop.
unset($dom) will not release memory, though: memory_get_usage(false) reports that only 700B of about 10MB got released. memory_get_usage(true) reports the exact same amount of memory usage before and after unset().
I tried the following:
I checked that the reference count of $dom is exactly one immediately before the call to unset(): xdebug_debug_zval('dom') reports: dom: (refcount=1, is_ref=0)=class DOMDocument { }.
I tried the solution proposed in DOMDocument PHP Memory Leak but this was to no avail.
I tried gc_enable() + gc_collect_cycles(). But this did not help either.
I tried calling $dom->__destruct() before unset() but this will result in an error as DOMDocument apparently does not have a destructor.
I recursively removed all nodes in the DOM before I unset the variable. It did not make the least difference.
I tried setting the variable to null before re-using it: $dom = null
Now I'm out of ideas... Anybody got a suggestion what else I could try to debug or solve this problem?
Edit:
php -v reports 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli)
The source code can be seen here: https://github.com/jerico-dev/ojs/blob/dev/plugins/generic/lucene/classes/SolrWebService.inc.php#L256
The output of the first few iterations is:
before object creation: 19292296
after object creation: 29849832
before unset: 30055232
after unset: 30054448
before object creation: 29849592
after object creation: 39858840
before unset: 40079920
after unset: 40079136
before object creation: 39858272
after object creation: 49923216
before unset: 50136448
after unset: 50135664
This should release the memory store in $dom.
$dom = null;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With