PHP:メモリの解放は重要
お客さんから連絡があって、システムを確認するとブラウザの表示が真っ白。
何が起きたかと思い調べていたら、MDB2で1GB以上のメモリを確保しようとして、エラーが出力されてるようになった。
原因調査
1画面で10項目以上の件数データを表示しているが、1個ずつ異なるSQLを実行して上で集計しているので、どこかの集計でエラーが発生している。
1項目ずつ件数データを修正するようにしながら調べたら、項目Cを処理するようにしたらエラーが発生するようになった。
項目Cと項目Eは、同じクラスを使ってオブジェクトを生成し、プロパティ違いで集計しているので、クラス自体がおかしいとはあまり考えられない。
対策
項目Cと項目Eの オブジェクト 名が別だったので、同じ名前にしてみたら、エラーが発生しなくなった。
このことから、 オブジェクト が不要なのに残っていたためと判断して、オブジェクトが不要になったら、unset()でオブジェクトを破棄してメモリを解放するようにしたら、エラーが発生しなくなった。
教訓
オブジェクトを生成して不要になったら、破棄するのを忘れてはいけない。
PHPでは、newしたら、deleteではなくunset()する。