今後のメモリリークを避けるために、PHPプログラム(Drupalモジュールなど)でメモリをリークする簡単なPHPスクリプトを使いこなしています。なぜこの単純なPHPスクリプトはメモリをリークしますか?
PHPの専門家が、このスクリプトがメモリ使用量を継続的に増加させる原因を見つけるのに役立つでしょうか?
さまざまなパラメータを変更して、自分で実行してみてください。結果は面白いです。ここでは、次のとおりです。
私にとって<?php
function memstat() {
print "current memory usage: ". memory_get_usage() . "\n";
}
function waste_lots_of_memory($iters) {
$i = 0;
$object = new StdClass;
for (;$i < $iters; $i++) {
$object->{"member_" . $i} = array("blah blah blha" => 12345);
$object->{"membersonly_" . $i} = new StdClass;
$object->{"onlymember"} = array("blah blah blha" => 12345);
}
unset($object);
}
function waste_a_little_less_memory($iters) {
$i = 0;
$object = new StdClass;
for (;$i < $iters; $i++) {
$object->{"member_" . $i} = array("blah blah blha" => 12345);
$object->{"membersonly_" . $i} = new StdClass;
$object->{"onlymember"} = array("blah blah blha" => 12345);
unset($object->{"membersonly_". $i});
unset($object->{"member_" . $i});
unset($object->{"onlymember"});
}
unset($object);
}
memstat();
waste_a_little_less_memory(1000000);
memstat();
waste_lots_of_memory(10000);
memstat();
、出力は次のようになります。
current memory usage: 73308
current memory usage: 74996
current memory usage: 506676
[未設定の複数のオブジェクトのメンバーに編集した]
問題を切り分けるために、一度にforループの行を削除しようとします。 –