darudaru

だるだるしてるエンジニア

Fatal error: Allowed memory size of のエラーが出て試したこと

「Fatal error: Allowed memory size of …」のエラーが発生したときに対応したことのメモ。このエラーはサーバに割り当てられたメモリをオーバーしてしまうと発生します。

1.メモリの上限をあげる

割り当てるメモリの上限を増やす対応です。

php.iniの上限を変更する

/etc/php.ini で定義されているメモリの上限を変更するやり方。

memory_limit = 128M

PHPのプログラムのini_setで上限を変更する

ini_setの関数を使用してメモリの上限を変更するやり方。php.iniを変更すると、そのサーバに設置されているプログラム全てに適用されますが、このやり方なら自分のプログラムだけに対してメモリ上限を増やすことができます。

<?php
ini_set("memory_limit", "128M");

2.メモリの解放

unset()で使用しない変数を破棄して使用メモリを減らすやり方。塵も積もれば何とやら。

<?php
$tmp = $object->get();
$data = $json->get($tmp);
unset($tmp);  // tmpはもう使わないので破棄

3.処理の見直し

たいてい、ひとつの変数に対して大量のデータを代入しようとするときにこのエラーが起きると思うのですが、一気に大量のデータを扱わずに細かく処理を分けるという対応をよく行います。 あとは、扱うデータを減らすことができないかという対応も検討したりします。

まとめ

メモリオーバーのエラーは、メモリの上限を増やすか、処理を見直して使用するメモリを減らすしか方法がありません。メモリの上限を増やすことが一番簡単ではありますが、どこまで増やすべきかということの検討や、もし扱っているデータが今後も増加するデータであるならば、今はよくてもまたそのうちメモリオーバーが起きるかもしれません。そのたびに上限を増やすというのは、あまりよくないやり方ですよね…。また、ひとつのサーバに自分以外のプログラムが置いてある場合は、自分のプログラムで使用するメモリ上限を増やしたせいで他のプログラムでメモリオーバーが起きるといったこともあるかもしれません。 まずは、使用するメモリを減らすことができないか処理の見直しをして、それでどうしようもなかったらメモリの上限を増やすことを検討する流れが対応としていいのではと思います。