PHP スクリプトで奇妙な問題が発生し続けます。スクリプトの考え方は、MySQL テーブルから大量のデータを取得して処理し、別のテーブルのデータと比較して、結果を CSV 形式のファイルに出力することです。
このスクリプトは、完了するまでに数十万回の反復を実行します。私が抱えている問題は、配列で unset() を使用し、MySQL クエリで free() を使用しても、反復が 350,000 前後になるまでメモリが引き続き使用され、メモリが不足することです。
間違いなく、スクリプトを実行するたびに、memory_get_usage() によって報告されるメモリ割り当ては、約 1050 回の反復まで同じままです。次に、正確に 262,144 バイト増加します。また、テストを通じて、スクリプト内のまったく同じ場所で常にインクリメントされます。以下のコード ブロックでは、b2a の反復の 1 つ (最大 4 回の反復) で常にインクリメントされます。
//up here we get the data to run analysis/comparisons on.
echo "{$lineCounter}b: " . memory_get_usage(TRUE) . "\n"; //27525120
if ($AttResults = $db_cx->query($ObsAttQuery)) {
echo "{$lineCounter}b1: " . memory_get_usage(TRUE) . "\n"; //27525120
$attArray = array();
echo "{$lineCounter}b2: " . memory_get_usage(TRUE) . "\n"; //27525120
while ($attRow = $AttResults->fetch_object()) {
echo "{$lineCounter}b2a {$attRow->attId}: " . memory_get_usage(TRUE) . "\n"; //27787264
$attArray[$attRow->attId] = $attRow->value;
}
echo "{$lineCounter}b3: " . memory_get_usage(TRUE) . "\n"; //27787264
$AttResults->free();
if (empty($attArray)) continue;
//down here after it is done I have an unset on the $attArray variable
試してみるべきことに関する提案はありますか??