WordPress の「Allowed memory size of … bytes exhausted」の直し方:WP_MEMORY_LIMIT と WP_MAX_MEMORY_LIMIT

WordPress 6.5
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

WordPress で「PHP Fatal error: Allowed memory size of … bytes exhausted」が出たときの直し方。wp-config.php の WP_MEMORY_LIMIT と WP_MAX_MEMORY_LIMIT の違い、効かないときの理由(サーバーの設定)、今の上限の確かめ方を、作業環境で試した結果つきで。

エラーの中身

PHP Fatal error: Allowed memory size of xxx bytes exhausted(xxx の数字は環境によって違います)

PHP が使ってよいメモリの上限を超えた、というエラーです。バックアップ・画像の処理・プラグインの重い処理などで出やすく、画面が真っ白になったり、「重大なエラーが発生しました」と出たりします。

wp-config.php でメモリの上限を上げる

wp-config.php(「編集が必要なのはここまでです」の行より上)
// サイトの表のページなどで使うメモリの上限
define( 'WP_MEMORY_LIMIT', '256M' );

// 管理画面の重い処理(画像の処理・更新など)で使うメモリの上限
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
定数 使われるところ 書かないとき
WP_MEMORY_LIMIT サイトの表のページなど、ふだんの処理 40M
WP_MAX_MEMORY_LIMIT 管理画面の重い処理(画像の処理・更新など) 256M(PHP の上限がそれより大きければ PHP の上限)

WordPress は、PHP の上限より大きい値のときだけ上限を上げます。小さい値を書いても下がりません。また、サーバーが上限の変更を許していないときは、書いても効きません。そのときは、サーバーの管理画面(PHP の設定の memory_limit)で上げます。

今の上限を確認する

管理画面の「ツール → サイトヘルス → 情報」で、「サーバー」のPHP のメモリ上限と、「WordPress 定数」の WP_MEMORY_LIMIT・WP_MAX_MEMORY_LIMIT が見られます。

確認した結果

作業環境(WordPress 7.1)で、PHP の上限をわざと 64M にして、WordPress を読み込みました。

試したこと PHP の上限
読み込む前 64M
WP_MEMORY_LIMIT を 256M にして読み込んだあと 256M に上がった
管理画面の重い処理のとき(wp_raise_memory_limit) WP_MAX_MEMORY_LIMIT の 512M に上がった

書かないときの値(40M・256M)と、下げないこと・変更が許されていないと効かないことは、WordPress のコード(wp-includes/default-constants.php)で確認しました。

上げたら、エラーになった処理をもう一度試す

Duplicator でバックアップを取っている途中にこのエラーが出たときは、上の設定をしてからもう一度実行して、メモリのエラーが出なくなりました。

上げっぱなしにするか、終わったら戻すか

いつも重い処理をするサイトなら、上げたまま使います。一時的な処理(バックアップや移行など)のときだけ上げたいなら、終わったら元に戻しておきます。

上限を上げても直らないときは、プラグインの不具合でメモリを使い続けていることもあります。どのプラグインのときに出るかを、1 つずつ止めて確認します。