ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:メモリの解放は重要

お客さんから連絡があって、システムを確認するとブラウザの表示が真っ白。

何が起きたかと思い調べていたら、MDB2で1GB以上のメモリを確保しようとして、エラーが出力されてるようになった。

原因調査

1画面で10項目以上の件数データを表示しているが、1個ずつ異なるSQLを実行して上で集計しているので、どこかの集計でエラーが発生している。

1項目ずつ件数データを修正するようにしながら調べたら、項目Cを処理するようにしたらエラーが発生するようになった。

項目Cと項目Eは、同じクラスを使ってオブジェクトを生成し、プロパティ違いで集計しているので、クラス自体がおかしいとはあまり考えられない。

対策

項目Cと項目Eの オブジェクト 名が別だったので、同じ名前にしてみたら、エラーが発生しなくなった。

このことから、 オブジェクト が不要なのに残っていたためと判断して、オブジェクトが不要になったら、unset()でオブジェクトを破棄してメモリを解放するようにしたら、エラーが発生しなくなった。

教訓

オブジェクトを生成して不要になったら、破棄するのを忘れてはいけない。

PHPでは、newしたら、deleteではなくunset()する。