F.Ko-Jiの「一秒後は未来」

メモリリークの原因はPHP5.2だった

何年か前に構築したサーバー環境がPHP5.2のままになっていて、ループをたくさん実行するプログラムを動かすと「Allowed memory size of … 」というメモリエラーが発生していました。

PHPでは memory_get_usage という関数でそのプログラムのメモリ使用量を確認することができます。

echo memory_get_usage(true) . "\n";

こいつをループの最後に記述してプログラムを実行すると、ループを繰り返すごとにメモリ使用量が増えていることが確認できました。

ループの中の変数ががきちんとメモリを解放していないのかと思い、ループの最後で unset してみたりしても解決せず、また、ローカルの開発環境で実行しても特に問題は発生せず、色々調べて原因はPHP5.2にあることがわかりました。

» PHP: パフォーマンスの考慮点 – Manual

このページのグラフにあるようにPHP5.2はメモリ使用量が線形的に増加。ローカル開発環境はPHP5.3だったので、問題は発生していなかったようです。

というわけでサーバーをPHP5.3にアップグレードして解決。

ただひとつ注意点として、プログラムによってはPHP5.3環境では正常に動かなくなることがあるので、検証は十分おこなうようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

最近はもっぱら仕事と育児、どちらかというと育児のほうが忙しいです。もう長いことドットインストールの開発をしています。

» 詳しいプロフィールや運営サービスの一覧など