WordPressのメモリ不足(Allowed memory size exhausted)の原因と対処法
直らないときは、無料でご相談いただけます(直らなければ料金はいただきません)。
結論:「Allowed memory size of ○○ bytes exhausted」は、PHPが使ってよいメモリの上限に届いて、処理が止まったときのエラーです。よくあるきっかけは、プラグインの追加・更新、大きな画像の処理、データの読み込みや書き出しなどです。
まず、直前にしたこととエラーの文を確かめ、関係していそうなプラグインやテーマを探します。そのうえで、必要なら wp-config.php やサーバーの設定で上限を上げます。上限を上げると直ることもありますが、原因が残っていると、また起きることがあります。
目次
この記事は、WordPressのトラブル解決を受け付けているWP-ingが、エラーの読み方と確かめ方をまとめたものです。
このエラーが出る場所
このエラーの文は、そのまま画面に出るとは限りません。次のような形で見つかることが多いです。
- サイトに「このサイトで重大なエラーが発生しました。」と出て、管理者に届くメールの「エラー詳細」に、この文が書かれている(重大なエラーの記事)
- 画面が真っ白になり、サーバーのエラーの記録(エラーログ)に、この文が残っている(真っ白の記事)
- 「500 Internal Server Error」と出て、エラーログにこの文が残っている(500エラーの記事)
なお、画像をアップロードしたときに「サーバーが画像を処理できません。…推奨する最大サイズは2560ピクセルです。」と出ることもあります。この表示は、メモリなどサーバーの力が足りないときに出るものですが、この表示だけでメモリ不足とは決められません。画像を小さく(長い辺を2560ピクセル以下などに)して試し、続くときは、エラーログにこの文がないかを確かめます。画像のアップロードで出るほかの文は、アップロードできないときの記事の「画像の処理で失敗するとき」をご覧ください。
エラーの文の読み方
エラーの文は、たとえば次のような形です。
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /home/…/wp-content/plugins/○○○/…php on line 123
| 部分 | 意味 |
|---|---|
| Allowed memory size of ○○ bytes | エラーが出たときの上限(バイト) |
| tried to allocate ○○ bytes | 上限に届いたときに、さらに使おうとした量 |
| in …php on line ○○ | 止まったときに動いていたファイルと行 |
上限の数字は、次のように読みかえられます。
| エラーの数字 | 上限 |
|---|---|
| 41943040 | 40M |
| 67108864 | 64M |
| 134217728 | 128M |
| 268435456 | 256M |
| 536870912 | 512M |
ファイルの場所に wp-content/plugins/○○○/ とあれば、そのプラグイン、wp-content/themes/○○○/ とあれば、そのテーマが関係している可能性があります。ただ、止まったときに動いていた場所なので、メモリを多く使った原因が別のところにあることもあります。wp-includes などWordPress本体の場所が出ても、そのファイル自体が原因とは限りません。その場合は、直前にしたことから確かめます。
今の上限を確かめる
管理画面に入れる場合は、「ツール」→「サイトヘルス」→「情報」で確かめられます。
- 「サーバー」の欄の「PHP メモリ上限」
- 「WordPress 定数」の欄の
WP_MEMORY_LIMIT(ふだんの処理で、WordPressが上限を引き上げるときの値)と、WP_MAX_MEMORY_LIMIT(管理者が管理画面を開いているときや、画像の処理などで使う値)
WordPressは、はじめの設定では、ふだんの処理で 40M(マルチサイトは64M)、管理画面や画像の処理などで 256M まで上限を上げようとします。ただ、サーバーの設定のほうが大きい場合は、サーバーの設定がそのまま使われます(WordPressが上限を下げることはありません)。そのため、サイトヘルスの数字と、エラーが出た処理での上限が同じとは限りません。エラーの文に出ている数字が、そのときの上限です。
原因を確かめる手順
作業の前に、バックアップ(ファイルとデータベースの両方)を取っておきましょう。管理画面から取れない場合は、レンタルサーバーの自動バックアップがあるかを確かめます。
- 直前にしたことを思い出します。プラグインやテーマの追加・更新、大きな画像のアップロード、データの読み込み・書き出し、バックアップの作成などの直後なら、それが関係している可能性があります。何も変えていなくても、記事や商品などのデータが増えて、同じ操作に必要なメモリが増えていることもあります。
- エラーの文のファイルの場所を見て、関係していそうなプラグインやテーマを確かめます(エラーの文の読み方)。
- そのプラグインの更新が出ていないか、配布元の案内に同じ不具合が出ていないかを確かめます。
- 管理画面に入れる場合は、そのプラグインを止めて、直るかを確かめます。止めている間は、そのプラグインの機能も止まるため、影響を確かめながら進めます。管理画面に入れない場合の止め方は、重大なエラーの記事の手順をご覧ください。
データの読み込み・書き出しや、バックアップの作成で出る場合は、件数や対象を分けられる機能なら、小分けにして試してみます。
上限を上げる方法
原因を確かめても、サイトの作り(プラグインの数や、大きなデータを扱う機能など)として、今の上限では足りないことがあります。その場合は、上限を上げます。どこまで上げるかは、エラーに出た数字と、契約しているサーバーの案内をもとに決めます。
1. wp-config.php で上げる
WordPressの公式の案内にある方法です。wp-config.php は、レンタルサーバーのファイルマネージャーやFTPのソフトで、WordPressのフォルダ(wp-admin・wp-includes のあるフォルダ)を開くと見つかります。
wp-config.phpの写しを、パソコンなど手元に保存します(元に戻せるように)。wp-config.phpを開き、WP_MEMORY_LIMITの行がすでにないかを確かめます。あれば、その行の値(例:256M)を書き換えます。- なければ、「
/* That's all, stop editing! Happy publishing. */」(日本語の環境では「編集が必要なのはここまでです」などの一文)の前に、次の1行を足します。目印の一文が見当たらないときは、無理に足さず、ご相談ください。define( 'WP_MEMORY_LIMIT', '256M' ); - 保存したら、サイトヘルスの「情報」で、値が変わったかを確かめます。サイトが表示されなくなったときは、写しに戻します。
- エラーが出た操作を、もう一度試します。同じエラーが出たときは、新しいエラーの文の数字も確かめます。数字が変わっていなければ、設定が効いていない可能性があります。
256M は一つの例です。エラーの数字がすでに 268435456(256M)の場合は、256M と書いても上限は増えません。また、サーバー側で変更が制限されていると、反映されないことがあります。その場合は、次の方法か、サーバー会社にご相談ください。
2. サーバーの設定で上げる
レンタルサーバーの管理画面で、PHPの memory_limit を変えられることがあります。設定はドメインごとのことが多いので、対象のサイトを選んで変えます。
| サーバー | 設定の場所 |
|---|---|
| エックスサーバー | サーバーパネル「php.ini設定」(設定できる項目に memory_limit があります) |
| ConoHa WING | 「サイト管理」→「サイト設定」→「応用設定」→「PHP設定」の「php.ini編集」 |
| さくらのレンタルサーバ | コントロールパネル「スクリプト設定」→「php.ini設定」。値は「MB」ではなく「M」で書き、memory_limit は post_max_size 以上にするよう案内されています。大きすぎる値は勧められていません |
プラグインやテーマ、大きなファイルをアップロードしたときに「辿ったリンクは期限が切れています。」と出る場合は、メモリではなく、post_max_size などのアップロードの上限が関係していることがあります(リンクの期限切れの記事)。
画面の名前や、変えられる項目は、サーバーやプランによって違います。見当たらないときは、サーバー会社にご相談ください。
上限を上げて直っても、プラグインの不具合などの原因が残っていると、プラグインを増やしたときなどに、また起きることがあります。WordPressの公式の案内でも、上限を上げると問題の元を隠してしまうことがある、とされています。直った後も、原因を確かめる手順で、関係していそうなものを確かめておくと安心です。
自分で進めるのが難しいとき
次のような場合は、無理に作業を進めず、ご相談ください。
- エラーの文が見つからない・読み方が分からない
- 上限を上げても、また同じエラーが出る
- 止めると困るプラグイン(ネットショップ・予約・会員など)が関係していそう
wp-config.phpやサーバーの設定を触るのが不安
WP-ingでは、メモリ不足のエラーをはじめ、WordPressの不具合の修理を承っています。状況を確かめて、作業の前に料金をご案内します。直らなければ料金はいただきません。お支払いは、直ったことを確かめていただいてからです。
よくある質問
上限は、大きくすればするほどよいですか?
大きくしすぎると、一つの処理がサーバーのメモリを多く使えるようになり、共用のサーバーでは、ほかの制限にかかることもあります。足りない分だけ上げ、原因も確かめておきましょう。
「Maximum execution time of 30 seconds exceeded」は同じエラーですか?
別のエラーです。こちらは、処理にかかる時間の上限に届いたときに出ます。どちらも、重い処理をしているときに出やすいエラーです。サイト全体が遅い・重いと感じるときは、遅い・重いときの記事もご覧ください。