Fatal error allowed memory size of 268435456 bytes exhausted tried to allocate 32768 bytes

This article will explain how to fix the Fatal error: Allowed memory size exhausted error.

A common error with Open Source Software like WordPress, Moodle, and Joomla is the php “Allowed memory size error.” Increasing the memory limit is an easy solution. This memory_limit can be changed in the php.ini in the public_html folder in your hosting account. This error can creep up in your website during the normal development process. The following is an example of the error:

Fatal error: Allowed memory size of 268435465 bytes exhausted
(tried to allocate 280559520) in Unknown on line 0

This is due to php variable data being stored in the memory that is not cleared while the php scripts are running.

For those who code their own sites: Coders use the unset() function to clear variable data that is no longer needed; however, with open source software, you will not want to alter any code.

How to fix the “Allowed memory size Error”

The php memory resource can be increased in the php.ini located in the public_html. The following steps will explain how to set the php.ini to allow a larger amount of memory use.

  1. Login to your cPanel
  2. Go to the File Manager.
  3. Select the Web root (public_html/www) directory and click Go.
  4. Find the php.ini file in the public_html.

    Note! If you do not have a php.ini in your public_html files, you can have our tech support staff restore the php.ini to your public_html directory.

    Open the php.ini with the code editor.

  5. Find the following section in the php.ini file.
    max_execution_time = 30
    max_input_time = 60
    memory_limit = 128M

    Try increase the memory_limit value to 256M.

    If the php memory_limit is already at 256M, you can increase it to 512M.

    Save the changes.

  6. In order for your memory limit to take effect you will need to make the php.ini recursive.

    Important! Making the php.ini recursive is an important step. If you do not know how to do this, please see our article on Make the php.ini recursive in the .htaccess.

    Now visit the site. You should not see the “Allowed memory size” error anymore. If the error still shows on your website, there may be a setting within the software itself that is overriding the change or the php.ini in the public-html may be overriden by another setting elsewhere. If this is the case, you can contact our our tech support staff to have them look into the error further.

В произвольный момент времени любой разработчик, создающий тему или плагин, либо просто пользователь, работающий с 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, ведь люди не стараются понять проблему.

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

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

Содержание

  1. Ошибка нехватки памяти в WordPress
  2. Переводим байты в мегабайты
  3. Настройка PHP
  4. Увеличиваем лимит памяти
  5. Несколько слов о выделении памяти

Ошибка нехватки памяти в 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

Ошибка о нехватки памяти при выполнении php: Fatal error

Ошибки в работе веб-приложений и веб-сайтов — вещь, которая может доставить много проблем. То, что узнать о такой ошибки владелец ресурса может куда позже пользователей, ещё более усугубляет ситуацию. В рамках данной статьи мы продолжим тему, которая поднималась в публикации Ошибка #1273 — Unknown collation: utf8mb4. Обновляем MySQL в Denwer, то есть поговорим о том, как исправить одну из распространённых ошибок, с которой сталкиваются веб-мастера.
Задача текущего топика — решить проблему исчерпания лимита памяти с последующим выводом ошибки Fatal error: Allowed memory size of * bytes exhausted.

Содержание статьи:

Представим ситуацию: мы обновляем SQL базу нашего сайта, импортируем созданный бэкап, но буквально через пару секунд после начала загрузки процесс останавливается и выводится ошибка.
Или другая ситуация: нужно нам авторизоваться на собственном сайте, открываем админ-панель, но вместо формы входам получаем ошибку выполнения.
А вот вообще критичный вариант: пользователь из поисковой выдачи пытается перейти на сайт, но вместо страницы с контентом получает ошибку.

Все три вышеописанных случая могут иметь разные причины, но также во всех трёх случаях причиной может быть нехватка выделенной памяти для выполнения php-кода. Если проблема именно в недостаточном количестве памяти, то ошибка, которая выведется на экран, будет примерно следующего содержания:

Fatal error: Allowed memory size of 1* bytes exhausted (tried to allocate 2* bates) in 3* on line 4*

где:
1* — допустимый для выделения объём памяти, в байтах;
2* — объём памяти, который необходим для дополнительного выделения, в байтах;
3* — путь до файл, при выполнении которого был исчерпан лимит выделенной памяти;
4* — номер строки в файле 3*, при выполнении которой был исчерпан лимит выделенной памяти.

Вот пример ошибки, выпадающей при попытке импорта базы сайта WordPress с хостинга на Денвер для работы в локальной сети, о возможности которой говорилось в статье Денвер в локальной сети. Локальный сайт на телефоне:

Ошибка: Fatal error: Allowed memory size of * bytes exhausted (tried to allocate * bates) in * on line *.

Из скриншота ошибки можно понять, что при попытке выполнения 290 строки файла import.lib.php объём выделенной памяти в размере ‪134 217 728‬ байт (или ‪128 Мегабайт) закончился, необходимо дополнительное выделение 41 767 538 байт (39,83 Мегабайт) памяти.
Перевод из байт в Мегабайты осуществляется двойным делением величины на 1024 (после первого деления байт на 1024 мы получим килобайты, после второго — Мегабайты). Обычно, в связи с кратностью памяти (элементарные байт и бит соотносятся в пропорции 1:8), объём памяти в php также указывают кратно 8, то есть 128 Мегабайт увеличивают не до 200, допустим, а до 256 Мегабайт.

Теперь, когда мы знаем, чем вызвана ошибка, нам остаётся исправить её одним из способов. Ниже мы приведём 4 возможных решения проблемы, которые, в свою очередь, условно разобьём на две главы. Все действия проводились с сайтами, построенными на CMS WordPress, однако, при соответствующем подходе, аналогичные шаги могут предприниматься для решения подобной проблемы и на других системах управления.

Увеличение WP_MEMORY_LIMIT в php файлах

В этой главе представим два варианта решения проблемы с нехваткой памяти выполнения кода, оба способа заключаются в редактировании php-файлов сайта, в которых задаётся значение параметра WP_MEMORY_LIMIT.

WP_MEMORY_LIMIT в wp-config.php

Первое решение, которое применяется довольно часто, связано с редактированием файла конфигурации wp-config.php.

  1. Открываем файл, находящийся по следующему пути:
    /public_html/wp-config.php

    и, если речь идёт о Денвере, соответственно:

    /www/wp-config.php
  2. В коде страницы сразу после тега <?php добавляем следующий код:
    //increase WP Memory Limit
    define('WP_MEMORY_LIMIT', '256M');

    Первая строчка — просто комментарий, он даже не обязателен. Но если мы добавляем его, то сам код обязательно должен начинаться с новой строки. Выглядеть это будет примерно так:
    Добавление WP_MEMORY_LIMIT в файл wp-config

  3. Сохраняем изменения в файле и проверяем работу сайта.

WP_MEMORY_LIMIT в default-constants.php

Как ясно из названия файла, default-constants.php отвечает за элементарные параметры веб-ресурса, что называется, «по умолчанию«. Разумеется, что это касается и значения величины WP_MEMORY_LIMIT.

  1. Открываем следующий файл на хостинге:
    /public_html/wp-includes/default-constants.php

    или файл на Денвере:

    /www/wp-includes/default-constants.php
  2. Находим условия выделения памяти по ключевому сочетанию WP_MEMORY_LIMIT. В файле этот параметр встречается несколько раз в связи с изменением его величины в зависимости от различных условий. Нас интересует последнее жёстко присвоенное параметру значение в цепочке кода. Вот как это примерно должно выглядеть:
    Редактирование WP_MEMORY_LIMIT в файле default-constants
  3. Изменяем значение 40M на нужное нам и сохраняем файл.

Увеличение memory_limit в прочих конфигурационных файлах

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

memory_limit в php.ini

Файл php.ini позволяет настраивать большое количество переменных, значение объёма выделенной памяти входит в их число. Для начала необходимо выяснить, где именно находится php.ini на нашем сервере, это зависит от операционной системы (разумеется, речь идёт об ОС сервера).

Любым текстовым редактором создаём php-файл со следующим содержим:

<?php
phpinfo();
?>

Сохраняем файл с произвольным именем, например, phpinfo.php. Готовый файл можно скачать в прикреплённом к статье архиве: phpinfo.
Теперь извлекаем из архива файл и помещаем его в корневую директорию сайта, то есть в каталог /public_html/ или /www/
Далее в адресной строке набираем адрес нашего сайта и через слеш имя файла phpinfo.php, например:

/myphpinfo.php

Переходим по адресу и получаем в ответ примерно такую страницу:

Получение информации о версии и конфигурации php, используемом на сайте

В первую очередь смотрим на значение строчки Loaded Configuration File, если путь до php.ini там не прописан, то обращаем внимание на параметр Configuration File (php.ini) Path. Путь может быть указан разный. Вот только несколько возможных примеров:

  • /public_html/wp-admin/php.ini
  • /etc/php/php.ini
  • WebServersusrlocalphp5php.ini

Теперь приступаем к увеличению выделенной памяти:

  1. Переходим в каталог, где хранится файл php.ini и открываем сам файл для редактирования. Если такого файла в каталоге нет, создаём его любым текстовым редактором.
  2. Добавляем в файл следующий код (всё, что указано после символа точки с запятой, является комментарием и не обязательно к добавлению):
    memory_limit = 256M ; увеличение памяти, выделяемой для работы скрипта

    Готовый файл можно скачать из прикреплённого к статье архива: php

  3. Сохраняем изменения и проверяем работу сайта.

memory_limit в .htacess

Заключительный в рамках данной статьи способ увеличения выделяемой памяти для выполнения скрипта — использование файла .htacess.
В упомянутой выше статье о настройке работы Денвер в локальной сети мы уже касались данного файла, поэтому здесь не будем уделять ему лишнего внимания. Отметим только то, что нас интересует для текущих действий, а именно то, что файл .htacess хранится в корневой директории сайта. Приступим к его редактированию:

  1. Переходим в корневую директорию сайта и открываем файл .htacess любым удобным текстовым редактором.
  2. Добавляем в файл самой верхней строчкой следующий код:
    php_value memory_limit 128M
  3. Сохраняем изменения в файле и проверяем работу сайта.

На этом всё. Мы рассмотрели 4 способа исправления ошибки Fatal error: Allowed memory size of * bytes exhausted.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Fatal error address life is strange
  • Fatal error a1020 cannot find link exe
  • Fatal error a1010 unmatched block nesting
  • Fatal error a1008 unmatched macro nesting
  • Fatal error a1007 nesting level too deep

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии