PHP / DOM文档:未设置()不释放资源(PHP/DOMDocument: unset() do

2019-09-20 09:36发布

我有一个变量$dom包含PHP的DOM文档的一个实例。 该变量被设置和取消一个循环内。

unset($dom)不会释放内存,但: memory_get_usage(false)报告说,大约10MB的唯一700B得到了释放。 memory_get_usage(true)报告之前和之后的内存使用情况的确切相同量的unset()

我试过如下:

  • 我检查$ DOM的引用计数是恰好一个立即之前将呼叫unset() xdebug_debug_zval('dom')报道:DOM:(引用计数= 1,is_ref = 0)=类的DOMDocument {}。

  • 我想提出的解决方案DOM文档PHP内存泄漏但这无济于事。

  • 我试图gc_enable() + gc_collect_cycles() 但这并没有帮助。

  • 我试着打电话$dom->__destruct()之前unset()但是这将导致一个错误的DOMDocument显然没有析构函数。

  • 我递归移除了所有DOM节点之前我取消设置变量。 它并没有使最小的差值。

  • 我尝试设置变量之前为空,再次使用它: $dom = null

现在我的想法......任何人有一个建议,还有什么我可以尝试调试或解决这个问题?

编辑:

  • PHP -v用了Suhosin贴片(CLI)报告5.3.10-1ubuntu3.2

  • 源代码可以在这里看到: https://github.com/jerico-dev/ojs/blob/dev/plugins/generic/lucene/classes/SolrWebService.inc.php#L256

  • 前几个迭代的输出是:

     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 

Answer 1:

这应该释放$ DOM存储器储存装置。

$dom = null;


文章来源: PHP/DOMDocument: unset() does not release resources