$dom
PHP の DOMDocument のインスタンスを含む変数があります。この変数は、ループ内で設定および設定解除されています。
unset($dom)
ただし、メモリは解放されませんmemory_get_usage(false)
。約 10MB のうち 700B のみが解放されたと報告されています。memory_get_usage(true)
の前後でまったく同じ量のメモリ使用量が報告されunset()
ます。
私は次のことを試しました:
unset()
$dom の参照カウントが:xdebug_debug_zval('dom')
reports: dom: (refcount=1, is_ref=0)=class DOMDocument { }の呼び出しの直前に正確に 1 であることを確認しました。DOMDocument PHP Memory Leakで提案されている解決策を試しましたが、これは役に立ちませんでした。
gc_enable()
+を試しgc_collect_cycles()
ました。しかし、これも役に立ちませんでした。$dom->__destruct()
以前に呼び出してみunset()
ましたが、DOMDocument には明らかにデストラクタがないため、エラーが発生します。変数の設定を解除する前に、DOM 内のすべてのノードを再帰的に削除しました。違いはほとんどありませんでした。
再利用する前に変数をnullに設定してみました:
$dom = null
今、私はアイデアがありません...この問題をデバッグまたは解決するために他に何ができるかを提案した人はいますか?
編集:
php -v は Suhosin-Patch (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