そのため、メモリに依存するデータ (大量のデータ) を処理する長時間実行スクリプトを実行しています。私は、メモリを節約するために、長時間実行されるプロセス全体で大きなオブジェクトを適切に破棄するという良い仕事をしていると思います。
現在のメモリ使用量を (memory_get_usage() を使用して) 継続的に出力するログがあり、メモリ使用量の増減 (重要なもの) に気づきません。これは、おそらくメモリ管理で正しいことをしていることを示しています。
ただし、サーバーにログオンして top コマンドを実行すると、このスクリプトを処理している apache プロセスがメモリの割り当てを解除しないことに気付きます (少なくとも top コマンドを介して目に見えるように)。PHPによって報告された現在のメモリ使用量がはるかに低い場合でも、メモリ使用量は最高のままです。
だから、私の質問は、メモリが実際にサーバーに解放されていない場合、メモリを節約しようとする試みは無駄ですか? それとも、ここで何かが欠けていますか。
ありがとうございました。
ps。Linuxでphp 5.4を使用する
pps。コードが必要な人のために、これは基本的な表現です:
function bigData()
{
$obj = new BigDataObj();
$obj->loadALotOfData();
$varA = $obj->getALotOfData();
//all done
$obj = NULL;
$varA = NULL;
unset($obj,$varA);
}
更新: hek2mgl が推奨するように、debug_zval_dump() を実行したところ、出力は正しいようです。
function bigData()
{
$obj = new BigDataObj();
$obj->loadALotOfData();
//all done
$obj = NULL;
debug_zval_dump($obj);
unset($obj);
debug_zval_dump($obj);
}
出力:
NULL refcount(2)
NULL refcount(1)