【PHP】エラー「 Allowed memory size of *** bytes exhausted (tried to allocate ** bytes)」時の対処法

PHPのシステムで以下のようなエラーが発生しました。

Fatal error : Allowed memory size of 2147483648 bytes exhausted (tried to allocate 80 bytes) in ・・・

なんと、処理に必要なメモリサイズがPHPで許容しているサイズ(2GB)を超えてしまったため、発生しました。

ファイルのアップロード処理やダウンロード処理の場合は大量のデータを扱うため比較的発生しやすかったりします。

 

このエラーの対処するにはメモリの最大サイズを上げる必要がありますが、今回はソフトウェア面での対処法をご紹介します。サーバに乗っているメモリサイズを超える場合は、対象の処理を見直すか物理的なメモリサイズを変更する必要が出てきます。

 

 

システム全体のメモリ上限を変更する

システム全体の最大メモリを上げるにはPHPの設定ファイルを修正します。

設定ファイルの場所はデフォルトでは「/etc/php.ini」になっています。サーバの構成によって異なる部分なので、そこは各々確認してみてください。

php.iniを変更

; Maximum amount of mem
; http://php.net/memory
;memory_limit = 2048M
memory_limit = 3072M

「memory_limit」の設定を2GBから3GBに変更しています。

 

注意点としては、設定を反映させるにはApache(Webサーバ)の再起動が必要になります

念のためApacheの再起動のコマンドを載せておきます。

・CentOS6の場合

/etc/init.d/httpd restart

・CentOS7の場合

systemctl restart httpd

 

 

処理単位でメモリ上限を変更する

処理ごとに最大メモリサイズを変更する場合は、PHPのソース内に以下のコードを追加すれば可能になります。

ini_set("memory_limit", "3072M");

これにより、このコード以下の処理はセッションが終了するまでの間、最大メモリサイズ3GB設定になります。

php.iniの設定よりもini_set()の設定が優先されるためです。

 

補足として、あまり推奨されていませんがメモリ上限をなくすことも可能です。

ini_set("memory_limit", "-1");

設定値を「-1」にすることで無制限に使用できますが、物理メモリサイズを超えるとエラーになるのでご注意ください。



投稿日:2020-11-18    更新日:2020-11-18

[スポンサーリンク]

関連記事
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]

最近の記事