Ошибка нехватки памяти в WordPress

В произвольный момент времени любой разработчик, создающий тему или плагин, либо просто пользователь, работающий с WordPress, может столкнуться с ошибкой Fatal Error: Memory Exhausted (память исчерпана). Обычно эта ошибка выглядит следующим образом:

Fatal error: Allowed memory size is 268435456 bytes exhausted (tried to allocated 29596635 bytes) in …/wp-includes/wp-db.php on line 885.

Безусловно, ваше сообщение об ошибке может иметь несколько иной вид, однако смысл его одинаков: вы столкнулись с ошибкой, она имеет отношение к доступному объему памяти, вы знаете, какой именно объем памяти был затребован, а также какой файл вызвал ошибку.

По моему мнению, одна из самых заметных проблем с такими вот ошибками – это слишком быстрое нахождение решения в Google, ведь люди не стараются понять проблему.

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

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

Ошибка нехватки памяти в WordPress

Используя приведенное выше сообщение, мы можем сказать, что выделенный объем памяти составляет 268435456 байт. Однако кто сейчас считает в байтах?

Нам гораздо удобнее оперировать мегабайтами, гигабайтами и терабайтами (хотя если у вас такой объем памяти, и вы столкнулись с указанной ошибкой, то это – совсем другая история).

Переводим байты в мегабайты

Первое, что мы сделаем – это переведем байты в мегабайты. Сделать это можно, к примеру, с помощью Google — достаточно ввести в поисковую строку следующий текст:

268435456 bytes to megabytes

В итоге мы получим результат:

bytes_to_mb

Очень удобно. Но что нам делать с этой информацией?

Во-первых, мы должны понимать, что у нас есть предел в 256 Mb памяти, которая доступна для использования в WordPress и PHP, и этой памяти не хватает для совершения операций.

Честно говоря, ограничения нужно выставлять для PHP, однако я буду работать с WordPress, поскольку часть решения проблемы может включать в себя определение новой константы. Однако об этом – через одно мгновение.

Настройка PHP

Нужно понимать то, что PHP имеет лимит памяти, а также то, что вы можете в некотором роде управлять им через WordPress. Обычно есть две вещи, которые нужно сделать, чтобы убедиться в том, что проблема решена в полном объеме.

Но сначала надо узнать, какую именно версию PHP вы используете. Если вы работаете с PHP на локальной машине, то вы, скорее всего, сможете найти версию PHP в панели управления своего веб-сервера:

php_adjust

В противном случае версия должна отображаться где-либо в пределах панели управления вашего хостинг-аккаунта.

Это даст нам понять, какой конфигурационный файл PHP нужно редактировать. В частности, вам нужно найти файл php.ini, который связан с вашей версией PHP.

Если у вас установлена только одна версия, прекрасно; иначе вам нужно будет найти файл php.ini для вашей определенной версии PHP, которая в данный момент запущена.

Увеличиваем лимит памяти

Как только вы найдете файл php.ini, взгляните на директиву memory_limit.

php_memory

На скриншоте выше можно видеть, что лимит памяти установлен в 25 Mb, что явно меньше требуемого нам. Потому нам понадобится увеличить его до, скажем, 128 Mb, после чего перезапустить сервер.

Что делать, если WordPress по-прежнему жалуется на ошибку?

В данном случае вам, возможно, понадобится внести одно дополнительное изменение в файл wp-config.php. Есть две константы, которые мы можем определить:

  1. WP_MEMORY_LIMIT
  2. WP_MAX_MEMORY_LIMIT

Узнать подробнее про них можно в кодексе. Как показывает мой опыт, удобнее всего определить сразу две константы, чем одну WP_MEMORY_LIMIT.

Я упомянул это, потому что в сети ходят советы, согласно которым можно просто задать WP_MEMORY_LIMIT. Я не говорю, что это неправильно – просто у меня были наилучшие результаты, когда были определены обе константы.

По аналогии с php.ini, добавляем в wp-config.php следующие значения:

define('WP_MEMORY_LIMIT', '128M');
define('WP_MAX_MEMORY_LIMIT', '128M');

Это должно решить проблему.

Также можно задать следующее правило в .htaccess:

php_value memory_limit 256M

Несколько слов о выделении памяти

Хочу сказать еще пару слов о выделении памяти. Несмотря на то, что самое простое решение – это увеличить доступную память, его не обязательно нужно делать в самом начале.

Фактически, я прибегаю к нему уже под конец, когда ничего не помогает.

Зачастую эта проблема является результатом работы какого-либо фрагмента кода, процедуры или определенного алгоритма – все это можно усовершенствовать и оптимизировать.

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

Источник: tommcfarlin.com

Блог про WordPress
Комментарии: 10
  1. Тарас Карабаза

    Сайт крутой,спасибо. И не ломай больше его исходный код. А то недавно заходил а там ошибка в строке парам пам пам. Успехов

    1. Дмитрий (автор)

      Спасибо. Я сайт не ломал, он сам сломался)

  2. Alex

    здесь пишется что 256мб не хватает, надо выставить больше 256, а не 128 или 256

    1. Дмитрий (автор)

      В таком случае да, правильно подмечено, нужно ставить лимит больше.

  3. Марина

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

  4. Алексей

    Статья 2013 года! :) Значит всё хорошо)

    1. Дмитрий (автор)

      Статья 2013 года, но проблема встречается и в 2020 )

  5. Михаил

    Добрый день! Проблема актуальна и решается и в 2022 году ))
    Был лимит 1Гб, получили алерт, увеличили до 2Гб, типа решили вопрос, но не можем понять, куда сливается память. Сможете проконсультировать? Оплату гарантируем.

    1. Дмитрий (автор)

      Здравствуйте, к сожалению, не консультируем.
      Попробуйте написать [email protected], скажите, что от oddstyle пришли. Возможно, они возьмутся.

      1. Михаил

        Да, знаем этот сайт, спасибо

Добавить комментарий

Получать новые комментарии по электронной почте.