Как исправить ошибку Allowed memory size exhausted в WordPress

Ошибка Allowed memory size exhausted — одна из самых распространённых проблем, с которыми сталкиваются разработчики и администраторы WordPress. Она возникает, когда скрипту не хватает выделенной памяти PHP для выполнения задачи. В этой статье мы подробно разберём причины появления этой ошибки, способы её диагностики и различные методы её устранения, включая настройки конфигурации, плагины и кастомный код.

Что такое ошибка Allowed memory size exhausted и почему она возникает

Ошибка появляется, когда PHP-скрипт превышает лимит памяти, установленный в конфигурации сервера или PHP. Стандартный лимит часто составляет 64 МБ или 128 МБ, но для крупных сайтов или плагинов с тяжёлыми задачами этого может быть недостаточно.

Типичное сообщение об ошибке выглядит так:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 262144 bytes) in /path/to/file.php on line 123

Это означает, что скрипт пытался выделить дополнительную память сверх лимита, и процесс остановился.

Основные причины:

  • Запросы к базе данных или обработка больших массивов данных.
  • Неправильно работающие плагины или темы с утечками памяти.
  • Скрипты, выполняющие тяжелые операции, например, генерация отчетов, импорт/экспорт.
  • Недостаточный лимит памяти PHP в настройках сервера.

Как проверить текущий лимит памяти и диагностировать проблему

Первый шаг — проверить, какой лимит памяти установлен в вашем окружении. Для этого можно добавить в корень сайта простой PHP-файл с содержимым:

<?php
// wperror_get_memory_limit
function wperror_get_memory_limit() {
    return ini_get('memory_limit');
}

echo 'Текущий лимит памяти PHP: ' . wperror_get_memory_limit();
?>

Откройте этот файл в браузере, и вы увидите текущий лимит.

Далее, чтобы понять, какой именно процесс или плагин вызывает превышение памяти, рекомендуется:

  • Отключить все плагины и включать их по одному, проверяя ошибку.
  • Переключиться на стандартную тему (например, Twenty Twenty-Three).
  • Изучить логи сервера и PHP (часто они содержат подробности о причинах).
  • Использовать плагины для профилирования памяти, например, Query Monitor.

Увеличение лимита памяти через wp-config.php и php.ini

Самый простой способ устранить ошибку — увеличить лимит памяти. Для этого можно изменить настройки в нескольких местах.

Изменение wp-config.php

Добавьте следующую строку в файл wp-config.php перед строкой /* That's all, stop editing! Happy publishing. */:

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

Это увеличит лимит памяти для фронтенда сайта до 256 МБ.

Изменение php.ini

Если есть доступ к серверу и файлу php.ini, найдите или добавьте строку:

memory_limit = 256M

После этого перезапустите веб-сервер (Apache, Nginx и т.д.).

Использование .htaccess

Если нет доступа к php.ini, попробуйте добавить в файл .htaccess следующую строку:

php_value memory_limit 256M

Однако этот метод работает не на всех серверах, особенно если используется PHP-FPM.

Плагины для контроля и управления памятью в WordPress

Для упрощения диагностики и управления памятью можно использовать специальные плагины:

  • Query Monitor — позволяет отслеживать использование памяти, запросы к базе данных, ошибки PHP.
  • WP Health — даёт информацию о состоянии сайта, включая лимиты памяти.
  • Debug Bar — расширяет панель администратора информацией о производительности и памяти.

Установка и использование Query Monitor:

1. В админке WordPress перейдите в "Плагины" -> "Добавить новый".
2. В поиске введите "Query Monitor".
3. Установите и активируйте плагин.
4. В верхней панели админки появится пункт с информацией о памяти.

Этот плагин поможет выявить, какой запрос или плагин расходует слишком много памяти.

Кастомные решения для контроля использования памяти в коде

Если вы занимаетесь разработкой, полезно вставлять контроль использования памяти прямо в код, чтобы понять, где именно происходит утечка или большой расход.

Пример функции для вывода текущего использования памяти с префиксом домена:

function wperror_memory_usage() {
    $mem = memory_get_usage(true);
    echo 'Использование памяти: ' . round($mem / 1024 / 1024, 2) . ' МБ';
}

Вы можете вызывать wperror_memory_usage() в разных местах кода, чтобы мониторить изменения.

Ещё один пример — ограничение потребления памяти для тяжелых операций:

function wperror_process_heavy_task() {
    ini_set('memory_limit', '512M');
    // Код тяжелой операции
}

Это временно увеличит лимит памяти для выполнения конкретной задачи.

Оптимизация кода и базы данных как способ предотвратить ошибку

Увеличение лимита памяти — это лишь временное решение. Важно оптимизировать работу сайта, чтобы не допускать чрезмерного расхода ресурсов.

Советы по оптимизации:

  • Используйте пагинацию или ленивую загрузку для вывода больших списков.
  • Оптимизируйте запросы к базе данных, избегайте избыточных JOIN и SELECT.
  • Проверяйте плагины на предмет утечек памяти и отключайте или заменяйте проблемные.
  • Регулярно очищайте кэш и базу данных (плагин WP-Optimize поможет).
  • Используйте транзиенты для кэширования дорогостоящих операций.

Пример оптимизации запроса с использованием wpdb и транзиентов

function wperror_get_cached_data() {
    $cached = get_transient('wperror_expensive_query');
    if (false !== $cached) {
        return $cached;
    }

    global $wpdb;
    $result = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_status = 'publish' LIMIT 100");

    set_transient('wperror_expensive_query', $result, 12 * HOUR_IN_SECONDS);

    return $result;
}

Такой подход уменьшит нагрузку на базу данных и снизит потребление памяти.

Как исправить проблему с неработающим WooCommerce Cart AJAX на сайте WordPress
28.05.2026
WooCommerce: как исправить проблему с неработающим обновлением корзины через AJAX
30.06.2026
Решение ошибки 404 на страницах WordPress
12.12.2025
Решение ошибки WP Login Redirect после сброса пароля в WordPress
22.03.2026
WooCommerce: решение проблемы с не обновляющейся ценой вариативных товаров
13.06.2026