2026年5月27日
2026年5月27日
WordPressで「Allowed memory size exhausted」エラーを解決する方法
はじめに
「Fatal error: Allowed memory size of 134217728 bytes exhausted」はWordPressがPHPに割り当てられたメモリを使い切ったときに発生します。プラグインの追加・大きな画像処理・複雑なクエリが引き金になることが多く、メモリ上限の引き上げで解決できます。
症状・原因
- 管理画面やフロントエンドに「Fatal error: Allowed memory size exhausted」が表示される
- 大きな画像をアップロードしたときや、特定のページで白い画面になる
- プラグインのアップデート後にエラーが頻発するようになった
- メモリを大量消費するプラグイン(WooCommerce・Elementor等)を入れた後から発生
解決手順
ステップ1:現在のメモリ使用量を確認する
# WP-CLI で現在のメモリ上限を確認
wp eval "echo ini_get('memory_limit'), PHP_EOL;"
wp eval "echo WP_MEMORY_LIMIT, PHP_EOL;"
# PHP のメモリ使用量をリアルタイムで確認
wp eval "echo memory_get_usage(true) / 1024 / 1024, 'MB used', PHP_EOL;
echo memory_get_peak_usage(true) / 1024 / 1024, 'MB peak', PHP_EOL;
echo ini_get('memory_limit'), ' limit', PHP_EOL;"
// wp-config.php に追加してデバッグ用にメモリ使用量を表示
add_action('shutdown', function(): void {
if (current_user_can('administrator')) {
$peak = memory_get_peak_usage(true) / 1024 / 1024;
error_log(sprintf('[memory] peak: %.1fMB / limit: %s', $peak, ini_get('memory_limit')));
}
});
ステップ2:wp-config.php でメモリ上限を引き上げる
// wp-config.php: WordPress のメモリ設定を引き上げる
// ※ require_once ABSPATH . 'wp-settings.php'; の前に記述すること
// フロントエンドのメモリ上限(デフォルト: 40MB)
define('WP_MEMORY_LIMIT', '256M');
// 管理画面のメモリ上限(デフォルト: 256MB)
define('WP_MAX_MEMORY_LIMIT', '512M');
ステップ3:php.ini または .htaccess で設定を変更する
# php.ini(サーバー全体に適用)
memory_limit = 256M
# .htaccess(Apache + mod_php の場合、サイトごとに設定)
php_value memory_limit 256M
# .user.ini(PHP-FPM 環境、共有ホスティングでよく使われる)
memory_limit = 256M
# 設定変更後に PHP のメモリ上限が反映されているか確認
php -r "echo ini_get('memory_limit');"
# PHP-FPM の場合は再起動が必要
systemctl reload php8.2-fpm
# WP-CLI で確認
wp eval "echo ini_get('memory_limit');"
ステップ4:メモリを消費しているプラグインを特定する
// functions.php: 各フック実行後のメモリ使用量をログに記録
add_action('all', function(string $hook): void {
static $prev = 0;
$current = memory_get_usage(true);
$diff = $current - $prev;
if ($diff > 1048576) { // 1MB 以上増加したフックをログ
error_log(sprintf('[memory] +%.1fMB after hook: %s (total: %.1fMB)',
$diff / 1024 / 1024,
$hook,
$current / 1024 / 1024
));
}
$prev = $current;
}, 1);
# プラグインを1つずつ無効化してメモリ消費を確認
wp plugin deactivate --all
# プラグインを1つずつ有効化して原因を特定
wp plugin activate woocommerce
wp eval "echo memory_get_peak_usage(true) / 1024 / 1024, 'MB';"
# Query Monitor プラグインでメモリ使用量を視覚的に確認
wp plugin install query-monitor --activate
ステップ5:メモリ消費を最適化する
// functions.php: 不要なデータを早めに解放する
add_action('wp_loaded', function(): void {
// 管理画面でない場合は不要な機能を無効化
if (!is_admin()) {
// emojiスクリプトを無効化(メモリ節約)
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
}
});
// 大量の投稿を処理する場合はループ後にキャッシュをクリア
add_action('loop_end', function(): void {
wp_cache_flush_group('posts');
});
// WP_Query でメモリを節約するオプション
$query = new WP_Query([
'posts_per_page' => 100,
'no_found_rows' => true, // ページネーション不要なら
'update_post_meta_cache' => false, // postmeta をキャッシュしない
'update_post_term_cache' => false, // タームをキャッシュしない
'fields' => 'ids', // ID のみ取得
]);
注意事項
WP_MEMORY_LIMITの設定はサーバーのmemory_limitより大きくすることはできません。まずサーバー側(php.ini/.htaccess/.user.ini)で制限を引き上げてから、WordPressの設定を変更してください- メモリを際限なく増やすのは根本解決になりません。512MBを超えてもまだ不足する場合はメモリリーク(解放されないオブジェクトの蓄積)が疑われるため、プラグインの問題調査や、バッチ処理のチャンク分割を検討してください
- 共有ホスティングではメモリ上限を変更できない場合があります。その際はVPSやクラウドサーバーへの移行を検討してください
まとめ
メモリ不足エラー解決は①wp eval "echo ini_get('memory_limit')"とmemory_get_peak_usage()で現在の使用量を把握、②wp-config.phpにWP_MEMORY_LIMIT='256M'・WP_MAX_MEMORY_LIMIT='512M'を追加、③php.iniまたは.htaccessのmemory_limitをサーバーレベルで引き上げ、④add_action('all', ...)でフック別メモリ消費をログ化してプラグインの原因を特定、⑤WP_Queryにno_found_rows・update_post_meta_cache=false・fields='ids'を指定してクエリのメモリ消費を削減します。