実際には不要になった古い参照を見つけるために、PHP でオブジェクトが参照されている場所を特定する方法はありますか?
背景:
PHP で記述された大規模なシステムをデバッグ/最適化しており、大規模なバッチ処理ジョブを実行するときにシステムのメモリ フットプリントを削減しようとしています。
流れは基本的に次のとおりです。
1)すべての処理に必要ないくつかのコンテキスト/オブジェクトをセットアップします
2) #1 で設定されたオブジェクトにのみ関連するオブジェクトに対して操作を N 回繰り返します。ループで作成された個々のオブジェクト間に関係/カップリングはありません。
N が十分に大きい場合、ステップ 2 で作成された各オブジェクトは、その特定のオブジェクトで処理が完了した後にガベージ コレクションできるはずですが、システムは常にメモリ不足になります。
ステップ 2 の各反復の最後に、次のことを行っています。
debug_zval_dump($lObj); echo gc_collect_cycles();
その結果、次の結果が表示されます。
debug_zval_dump: refcount(3) gc_collect_cycles: 0
上記は、何らかの理由でシステム内のどこかに保持されているオブジェクトへの古い参照があることを前提としていますが、コードを調べるだけではそれらを見つけるのに苦労しています。
どんな助けでも大歓迎です!