WordPressで重大なエラーが表示された時のPHPメモリ不足の対処法

WordPressで重大なエラーが表示された時のPHPメモリ不足の対処法

WordPressで重大なエラーが表示された時のPHPメモリ不足の対処法

WordPressで「このサイトで重大なエラーが発生しました」と表示される場合、まずPHPのメモリ上限(メモリリミット)を疑う。ログに「Out of memory」が記録されていれば、原因はほぼ特定できたも同然だ。対処は、エラーログの確認、メモリ上限の引き上げ、プラグインの切り分けの3ステップで進める。

なぜ「このサイトで重大なエラーが発生しました」と表示されるのか

なぜ「このサイトで重大なエラーが発生しました」と表示されるのか

このエラーは、WordPress本体・プラグイン・テーマのいずれかが処理中に致命的な失敗(PHPのFatal Error)を起こすと表示される。管理画面の表示では具体的な理由が出ないため、原因を知るにはサーバーのエラーログを見る必要がある。

相談例のあるサイトで実際に記録されていたのは「PHP Fatal error: Out of memory(メモリ不足)」というエラーだ。割り当てられたメモリを使い切ると、WordPressは処理を中断して「重大なエラー」を返す。これが出るページと出ないページがあるのは、ページごとに必要なメモリ量が違うためだ。商品一覧や投稿編集画面など、表示に多くのデータを処理するページほどメモリを消費しやすい。

すべてのプラグインを無効化すると大半のページが開けるが、一部のページだけエラーになる場合も、原因はプラグイン単体ではなく「ページの処理量×プラグインのメモリ消費」の組み合わせで上限を超えている可能性が高い。

PHPに割り当てられるメモリには上限があり、この範囲を超えた処理は即座に中断される
ページの処理量 × プラグインのメモリ消費 = メモリ上限を超過
■ エラー状態 ■ 正常状態 ■ プラグイン負荷

上の図は、メモリ不足エラーが起こる仕組みを示したものだ。ページの処理量とプラグインのメモリ消費が掛け合わさり、サーバーが許容するメモリ上限を超えると「Out of memory」が発生する。

エラーログで原因を特定する手順

エラーログで原因を特定する手順

まず、サーバーのエラーログに何が記録されているかを確認する。ログを見れば、「このサイトで重大なエラーが発生しました」の薄い画面だけではわからない具体的な原因が判明する。

wp-config.phpでデバッグログを有効にする

FTPソフトかレンタルサーバーのファイルマネージャーでWordPressのインストール先にアクセスし、wp-config.phpを開く。ファイル内のルート定数と呼ばれるエリアに、次のコードがすでにあるかを確認する。なければ、ファイルの終わり直前にある赤い注意書きの上あたりに追記する。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

設定を保存したら、エラーが起きるページをもう一度開く。続けて、wp-contentディレクトリの中に「debug.log」というファイルが生成されていないかを確認する。このファイルに、エラーが起きた時刻・原因のファイル・メモリ使用量が記録される。

ログに「Out of memory」があるかを確認する

debug.logを開くと、次のような行が複数記録されている。ここで見るべきは「Out of memory」というキーワードだ。

PHP Fatal error: Out of memory (allocated 41943040 bytes) (tried to allocate 122880 bytes) in /home/example/public_html/wp-includes/html-api/class-wp-html-tag-processor.php on line 2644

「allocated」はその時点で使っていたメモリ量、「tried to allocate」はさらに必要としたメモリ量を示す。例にある41943040バイトは約40 MBだが、これは割り当て上限に達した値であり、この数字自体がサーバーの上限を示すとは限らない。しかし、このエラーが複数回出ている場合は、WordPressのメモリ上限が不足していると判断してよい。

ログに「Fatal error: Out of memory」以外のエラーが記録されている場合は、原因が別にある。たとえば「PHP Deprecated」で始まる行は、将来のPHPバージョンで動かなくなる機能の予告であり、当面は致命的ではない。まずは「Fatal」が含まれる行を優先して確認する。

STEP 1 wp-config.phpでWP_DEBUG_LOGをtrueにする
↓
STEP 2 エラーが出るページを開く
↓
STEP 3 wp-content/debug.logに記録されたOut of memoryを確認する

ここまでの手順で、エラーログからメモリ不足が原因かどうかを特定できる。原因がわかったら、次のどちらか、または両方の対処を進める。

PHPのメモリ上限を引き上げる方法

PHPのメモリ上限を引き上げる方法

メモリ不足エラーが記録されていた場合、最初に試すのはPHPのメモリ上限を引き上げることだ。変更方法は、レンタルサーバーの管理画面から変更する方法と、wp-config.phpにコードを追記する方法の2つがある。

レンタルサーバーの管理画面から変更する

多くのレンタルサーバーには、PHPバージョンやメモリ上限を管理画面から変更できる機能が備わっている。とくに「PHP設定」「PHPバージョン管理」といった名称のページを探す。メモリ上限が選択式になっている場合は、現在の値より大きいものを選ぶ。たとえば今が128 MBなら256 MBに、256 MBなら512 MBに上げる。

もし管理画面にメモリ上限の設定項目が見つからなければ、サーバー会社のサポートに連絡してメモリ上限を上げてもらえるかを確認するのが確実だ。共用サーバーの場合、上限を自分で変更できない仕様も多い。

wp-config.phpでメモリ上限を指定する

サーバー側で変更できない場合や、すぐに試したい場合はwp-config.phpにコードを追加する。先ほどのデバッグ設定と同じファイルに、次の行を追記する。

define( 'WP_MEMORY_LIMIT', '256M' );

これはWordPress側からPHPに対して「利用できるメモリ上限を256 MBに設定する」よう指示するための定数だ。256Mの部分は現在の設定より大きい値に変更してよい。

ただし、レンタルサーバー側でPHPのメモリ上限が128 MBに固定されている場合、このコードを書いても上限は128 MBのまま変わらないことがある。設定後にエラーログへ「Allocated memory size」の値がどう変わったか、WordPressが返す「Out of memory」の数値が変わったかを確認し、変化がなければサーバー側での変更が必要だと判断する。

メモリを上げても直らない場合は原因が別にある

メモリ上限を上げたのにエラーが続く場合は、メモリ上限を超えるほどの異常なメモリ消費を起こしている何かが存在する。典型的なのは、プラグイン同士の競合、テーマの不具合、データ量の増加だ。この場合は次のプラグイン切り分けに進む。

プラグインを切り分けて原因を見つける手順

プラグインを切り分けて原因を見つける手順

メモリ上限を上げても改善しない場合、またはメモリ消費が極端に大きい原因を特定する場合は、プラグインの切り分けを行う。手順は、全プラグインを無効化し、サイトが正常に動くかを確認してから、1つずつ有効化して症状が再現するかを見るだけだ。

ただし、プラグインの数が多いほど手間がかかる。11個程度なら1つずつ切り分けても数十分で終わるが、数十個入っている場合はまず「更新が止まっているプラグイン」「不要なプラグイン」から削除して数を減らすとよい。

全プラグインを無効化してエラーが消えるか確認する

WordPress管理画面の「プラグイン」画面を開き、すべてのプラグインのチェックボックスを選択して「一括操作」から「停止」を選ぶ。エラーが出るページが管理画面内のページなら、その画面を開き直す。公開ページのエラーなら、別のブラウザタブで該当ページを開く。

全プラグインを無効化した状態でエラーが消えるなら、原因はプラグインか、プラグインとテーマ・本体の組み合わせにある。エラーが消えないなら、テーマまたはWordPress本体の問題を疑う。

プラグインを1つずつ有効化して症状を再現させる

エラーが消えた状態から、プラグインを1つ有効化しては同じページを再読み込みする。これを繰り返し、エラーが再び出た時点で直前に有効化したプラグインが原因の候補になる。

複数のプラグインが組み合わさってエラーを起こすこともある。1つずつ試して単体では再現しない場合も、直近で更新されたプラグインや、ログにファイル名が出ているプラグインを中心に「何と何を同時に有効化した時に起きるか」を確認する。

原因プラグインを特定した後の対応

原因のプラグインがわかったら、次の順で対処する。そのプラグインが最新版でないなら更新し、更新後も直らない場合はプラグインを無効化したままにして代替手段を検討する。とくにアクセス解析・バックアップ・セキュリティ系のプラグインは、複数が同時に動くとメモリを大きく消費しがちだ。

STEP 1 プラグインをすべて無効化してエラーが消えるか確認
↓
STEP 2 1つずつ有効化しながら同じページを再読み込み
↓
STEP 3 エラーが再発した直前のプラグインを原因候補に
↓
STEP 4 更新・無効化・代替プラグインの検討を行う

この切り分け手順は、原因がプラグインにあるかどうかを目で確認する最も確実な方法だ。慣れれば30分程度で完了する。

エラーの再発を防ぐためにできること

エラーの再発を防ぐためにできること

重大なエラーが出るたびに同じ調査をするのは手間が大きい。再発を防ぐには、日頃から次の3点を意識しておく。

不要なプラグインは入れない・残さない

プラグインは、サイトの表示や編集画面の読み込みのたびにメモリを消費する。とくにアクセス解析、SEO、バックアップ、セキュリティ、キャッシュなど、常駐して動作するタイプは複数入れると負荷が上がりやすい。使用していないプラグインは削除し、必要最小限の構成を保つ。

PHPバージョンを更新する時は事前に確認する

PHPバージョンを上げると、古いプラグインやテーマが新しいPHPの仕様に対応できず、メモリ消費が急に増える・エラーを起こすことがある。PHPを更新する前に、利用中のプラグインとテーマが新しいPHPバージョンに対応しているかを公式ページや変更履歴で確認する。バージョン更新は、作業前に必ずバックアップを取ってから行う。

デバッグログは定期的に確認する

WP_DEBUG_LOGを有効にしたままだと、気づかないうちにログファイルが肥大化することがある。原因調査が終わったら、WP_DEBUGとWP_DEBUG_LOGをfalseに戻しておく。ただし、不具合の予兆はそこに記録されるので、サイトの調子がおかしいと感じた時に一時的にオンにして確認する習慣をつけると、大きなトラブルを未然に防げる。

よくある質問

「このサイトで重大なエラーが発生しました」とメールが届いたが何をすればいいのか

WordPressの自動メール通知機能がエラーを検知して送ったものだ。まずはサーバーのエラーログを見て、記録されたエラーの種類を確認する。Out of memoryならメモリ上限の引き上げ、特定のプラグインが出力しているエラーならそのプラグインの無効化から始める。

管理画面にすらログインできない場合はどうするのか

FTPソフトかレンタルサーバーのファイルマネージャーからwp-content/pluginsディレクトリにアクセスし、原因と思われるプラグインのフォルダ名を一時的に変更して無効化する。これで管理画面に入れたら、管理画面から原因のプラグインを削除すればよい。

PHPのメモリ上限はどこまで上げてよいのか

共用レンタルサーバーの場合、サーバー会社が定めた最大値までしか上げられない。一般的には256 MBから512 MBの範囲で様子を見て、それ以上必要な場合はVPSや専用サーバー、マネージドWordPressホスティングへの変更を検討する。値を上げすぎるとサーバー全体の負荷が上がり、他の利用者に影響する場合もある。

エラーログに複数のFatal errorが記録されている場合はどうするのか

すべてが同じ原因とは限らないが、連続して記録されている場合は、最初に起きたエラーが後続のエラーを誘発していることが多い。一番古い時刻の「Fatal error」を優先して対処し、その後ログを消してから再度エラーを再現させる。

この記事のポイント

  • 重大なエラーの原因はまずエラーログで確認する
  • 「Out of memory」はPHPのメモリ不足を意味する
  • メモリ上限はwp-config.phpかサーバー管理画面から引き上げる
  • プラグインの全停止と1つずつの再有効化で原因を切り分ける
  • 再発防止はプラグインの整理と定期的なログ確認が基本
佐々木 太陽

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化 ・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門 ・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標 ・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意 ・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

この記事に関連するサービス

メッセージを残す