メモリリークの原因はPHP5.2だった
何年か前に構築したサーバー環境がPHP5.2のままになっていて、ループをたくさん実行するプログラムを動かすと「Allowed memory size of … 」というメモリエラーが発生していました。
PHPでは memory_get_usage という関数でそのプログラムのメモリ使用量を確認することができます。
echo memory_get_usage(true) . "\n";
こいつをループの最後に記述してプログラムを実行すると、ループを繰り返すごとにメモリ使用量が増えていることが確認できました。
ループの中の変数ががきちんとメモリを解放していないのかと思い、ループの最後で unset してみたりしても解決せず、また、ローカルの開発環境で実行しても特に問題は発生せず、色々調べて原因はPHP5.2にあることがわかりました。
このページのグラフにあるようにPHP5.2はメモリ使用量が線形的に増加。ローカル開発環境はPHP5.3だったので、問題は発生していなかったようです。
というわけでサーバーをPHP5.3にアップグレードして解決。
ただひとつ注意点として、プログラムによってはPHP5.3環境では正常に動かなくなることがあるので、検証は十分おこなうようにしましょう。
コメントを残す