• WordPressのメモリー上限を変更する前に、WP_MEMORY_LIMITとWP_MAX_MEMORY_LIMITを分ける

WordPressのメモリー上限を変更する前に、WP_MEMORY_LIMITとWP_MAX_MEMORY_LIMITを分ける

公開日: 執筆:佐藤

WordPressでメモリー不足が発生しても、最初から二つの定数を同じ値へ増やす必要はありません。通常のページ表示や処理にはWP_MEMORY_LIMITが関わります。manage_options権限を持つ利用者の管理画面や、ファイル展開などの管理処理にはWP_MAX_MEMORY_LIMITが関わります。

先に、PHPのmemory_limit、エラーが発生した処理、WordPressが適用しようとした定数を分けます。定数を書き換えても、サーバーがPHPの上限変更を許可しなければ値は変わりません。

WP_MEMORY_LIMITは通常処理で使う値を決める

WordPressは、初期定数を設定する処理でWP_MEMORY_LIMITを定義します。未定義なら、通常サイトでは40M、マルチサイトでは64Mです。

この値は、WordPressが必ずPHPへ課す上限ではありません。WordPressはPHPの現在のmemory_limitを読み、現在値がWP_MEMORY_LIMITより小さい場合だけ、ini_set()で引き上げようとします。PHPがすでに128Mなら、既定の40Mへ下げません。PHPが-1なら、そのままにします。

したがって、確認する値は次の三つです。

確認する値 役割
PHPのmemory_limit その処理でPHPが使用する実際の上限
WP_MEMORY_LIMIT 通常処理でWordPressが適用しようとする値
WP_MAX_MEMORY_LIMIT 管理処理でWordPressが適用しようとする別の値

WP_MEMORY_LIMITという名前だけを見て、WordPressの実際の上限が常にその値だとは判断できません。

WP_MAX_MEMORY_LIMITは管理処理で別の値を使う

WP_MAX_MEMORY_LIMITが未定義なら、WordPressは256Mを定義します。管理画面の初期化処理は、manage_options権限を持つ利用者の管理画面で、この値をPHPのmemory_limitへ設定しようとします。

ファイルを展開する処理でも、WP_MAX_MEMORY_LIMITが使われます。WordPress本体、プラグイン、テーマの更新で圧縮ファイルを展開するときは、通常のページ表示とは処理を分けて考えます。

エラーが出た場面 先に確認する定数
公開ページ、通常のWordPress処理 WP_MEMORY_LIMIT
管理画面でmanage_options権限がある利用者の処理 WP_MAX_MEMORY_LIMIT
更新時のファイル展開 WP_MAX_MEMORY_LIMIT

WP_MAX_MEMORY_LIMITは、名前だけで「現在値より必ず大きくする定数」と考えません。該当する管理処理では、定義した値をini_set()へ渡します。二つの定数を定義するなら、管理画面でどの値へ切り替えるのかを意図して決めます。

メモリー不足の表示がある処理だけを切り分ける

Allowed memory size of ... bytes exhaustedというエラーが出た場合は、PHPが利用可能なメモリーを使い切っています。ただし、エラー文がない白画面や管理画面の停止を、すべてメモリー不足とは決めません。

まず、エラー文と発生した操作を記録します。公開ページの表示、画像処理、プラグインの操作、WordPressの更新では、実行される処理が違います。次に、その操作で使われたPHPのmemory_limitと、二つのWordPress定数を確認します。

PHPの現在値が必要量より小さく、サーバーが実行時の変更を許可している場合に、該当する定数の変更を検討します。エラーが出たという理由だけで、利用可能な最大値まで上げるものではありません。処理が必要以上のデータを読み込んでいる場合は、上限を増やしても再び上限へ達する可能性があります。

wp-config.phpではwp-settings.phpを読む前に定義する

二つの定数は、wp-config.phpでWordPress本体を読み込む前に定義します。wp-config.phpのサンプルでは、最後にwp-settings.phpを読み込むため、その行より前へ置きます。

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

64Mと256Mは書式を示す例であり、すべてのサイトへ共通する推奨値ではありません。WP_MEMORY_LIMITだけを変更する場合は、一行だけ定義します。WP_MAX_MEMORY_LIMITも変更する場合は、管理処理で必要な値を別に決めます。

編集前にwp-config.phpを保存し、元へ戻せる状態にします。このファイルにはデータベース接続情報や認証用のキーもあるため、公開ディレクトリの外へ不用意に複製しません。編集する人と、サーバー側の上限を変更できる人も分けて確認します。

定数を変更してもサーバーの制限は越えられない

wp-config.phpの公式説明は、ホスティング環境がPHPのメモリー上限変更を許可しない場合、この設定が働かないと案内しています。その場合は、サーバー管理者またはホスティング事業者側でmemory_limitを確認します。

WordPressのコードはini_set()の警告を抑えているため、定数を追加できたことだけで変更成功とは判断しません。変更後にPHPの実際のmemory_limitを確認し、同じ操作をもう一度実行します。

同じ処理で再びメモリー不足になるなら、使用量を増やしたプラグイン、テーマ、画像処理、更新処理を切り分けます。上限の変更は、原因を調べずに処理量を増やす許可ではありません。

まず、直近のエラー文と、エラーが出た操作を一つ記録してください。通常処理か管理処理かを決め、現在のPHP memory_limitを確認してから、変更する定数を選びます。

戻る