Magentoを使用していると、PHPメモリが上限値に達してしまうことがあります。
いざそうなったときにどのように対処すればいいか解説します。
こう出たらPHPメモリ不足
そもそもPHPメモリが上限に達してしまう原因は何でしょうか。
以下のようなことが考えられます。
- Magentoエクステンションが多くインストールされていて、PHPプロセスが多数行われている
- プログラムの記載ミス
- メモリリークが起きている
PHPメモリが上限に達するとWEB表示が重くなり、以下のようなメッセージが表示されることとがあります。
Fatal error: Allowed memory size of 792723456 bytes exhausted (tried to allocate 20480 bytes) in /home/webmaster/public_html/vendor/magento/framework/DB/Statement/Pdo/Mysql.php on line 90
必要ないエクステンションを削除する、プログラムの記載ミスをなくすなどが根本的な原因を正すのがいいですが、ひとまずPHPメモリを引き上げて切り抜けることにします。
メモリ上限値はこう確かめる
Magentoのメモリ上限値を確かめるには、以下のようなPHPファイルをMagentoのルートディレクトリに入れましょう。
<?php
phpinfo();
?>
入れたPHPファイルをブラウザで表示させるとこのように出てきます。
memory_limitという項目を探し、左側の数値がMagentoがインストールされているディレクトリのメモリ上限値です。(右側はサーバー全体のPHPメモリ上限値)
メモリを引き上げるにはここを見る
1.php.ini
phpの設定ファイルであるphp.iniを修正してメモリ上限を引き上げます。
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 4096M
memory_limitと書かれた項目を探し、メガバイト単位で数値を変えます。
2.Magentoディレクトリの.htaccess
php.iniを数値を変えてもメモリ上限値が変わらない場合はMagentoディレクトリの.htaccessでメモリ上限値を決めている可能性があります。
php_value memory_limit 256M
.htaccessでこのように書かれていた場合、数値を変えてapacheを再起動します。
3.Magentoディレクトリの.user.iniファイル
ここでもないという場合は、Magentoディレクトリに.user.iniファイルがないか確認しましょう。
memory_limit = 2048M
このように書かれていた場合、数値を変えてapacheを再起動します。
Adobe Commerce/Magentoでの開発・移行をお考えなら、Magento構築・リニューアル支援もご参照ください。
よくある質問
MagentoでFatal error: Allowed memory size exhaustedが出た場合、どこでメモリ上限を変更できますか?
変更箇所は主に3か所あります。①php.iniのmemory_limit項目、②MagentoディレクトリのMagentoディレクトリの.htaccessのphp_value memory_limit、③Magentoディレクトリの.user.iniファイルのmemory_limitです。php.iniを変更してもMagentoのメモリ上限が変わらない場合は.htaccessや.user.iniが上書きしている可能性があります。
MagentoのPHPメモリ上限値を確認するにはどうすればよいですか?
Magentoのルートディレクトリにphpinfo()を出力するPHPファイルを設置してブラウザで表示し、「memory_limit」の項目を確認します。表示される左側の数値がMagentoディレクトリのメモリ上限値で、右側がサーバー全体のPHP上限値です。
MagentoでPHPメモリ不足が起きる原因は何ですか?
主な原因として、多数のMagentoエクステンションがインストールされてPHPプロセスが増大していること、プログラムの記述ミス、またはメモリリークが考えられます。根本解決にはエクステンションの整理やコード修正が必要ですが、一時対応としてメモリ上限値を引き上げることで症状を回避できます。
弊社ではMagentoを利用した多機能ECサイトの構築・越境EC/中国越境ECの開発をして企業様をサポートしています。 ご興味ある方は是非問い合わせください。
