我有一個變量$dom
,其中包含PHP的DOMDocument實例。這個變量在循環中被設置和取消設置。PHP/DOMDocument:unset()不釋放資源
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 {}。我嘗試了DOMDocument PHP Memory Leak中提出的解決方案,但這是無濟於事。我想試試
gc_enable()
+gc_collect_cycles()
。但是這也沒有幫助。我試着在
unset()
之前調用$dom->__destruct()
,但是這會導致錯誤,因爲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
嗨..我面臨同樣的問題..你找到任何解決方法嗎? – 2014-03-28 11:20:16
對不起,我不記得了。我記得我沒有找到一個合適的解決方案,並以某種方式解決它。 – jerico 2014-03-28 15:32:07
它與內存泄漏有關嗎? http://stackoverflow.com/questions/8379829/domdocument-php-memory-leak – 2014-03-29 13:18:49