Ошибка memory size error

Когда вашему скрипту не хватает оперативной памяти для его выполнения (точнее он не укладывается в объём, который ему разрешён), возникает ошибка «Allowed memory size of XXX bytes exhausted (tried to allocate YYY bytes)».

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

Варианты

Один из этих вариантов вам точно поможет.

Способ первый

В файле настроек РНР (php.ini) пишем:

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

Способ второй

В файле настроек сайта (.htaccess) пишем:

php_value memory_limit 100M

При определённой конфигурации сервера вы можете получить ошибку 500 — Internal Server Error.

Способ третий

В теле вашего скрипта (например, config.php) пишем:

<?php
ini_set('memory_limit', '100M');
?>

Самый простой и безопасный ход решения проблемы. Меня выручает постоянно.

Для сайта на WordPress

В начале вашего файла конфигурации wp-config.php в корне сайта добавьте строку:

<?php
define( 'WP_MEMORY_LIMIT', '100M' );
?>

Errors htaccess PHP WordPress

Время на прочтение
1 мин

Количество просмотров 5.2K

Когда вашему скрипту не хватает оперативной памяти для его выполнения (точнее он не укладывается в объём, который ему разрешён), возникает ошибка «Allowed memory size of XXX bytes exhausted (tried to allocate YYY bytes)».

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

Один из этих вариантов вам точно поможет.

Способ первый:

В файле настроек РНР (php.ini) пишем:

memory_limit = 100M

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

Способ второй:

В файле настроек сайта (.htaccess) пишем:

php_value memory_limit 100M

При определённой конфигурации сервера вы можете получить ошибку 500 – Internal Server Error.

Способ третий:

В теле вашего скрипта (например, config.php) пишем:
<?php
ini_set('memory_limit', '100M');
?>

Самый простой и безопасный ход решения проблемы. Меня выручает постоянно.

Ошибка Fatal error: Allowed memory size гласит о том, что вы достигли ограничения по памяти, которые у вас установлены в настройках web-сервера.

Например, текст ошибки:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in … говорит, что 128 Мб не достаточно (число выше указано в байтах) и его нужно увеличить, либо в указанном месте решить проблему с утечкой памяти.

Решение проблемы с ограничением памяти

Есть два варианта как завершить операцию:

  • Оптимизировать скрипт.

  • Увеличить лимит по памяти.

Первый вариант сложен и не всегда возможен. Поэтому рассматривать его не будем.

Хотя, зачастую бывает так, что сайт, например, пытается сжать очень большую картинку в другой размер (например, фото в оригинале весит 20 Мб). В этом случае просто используйте оригинальные картинки меньшего размера.

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

Файл php.ini

Это рекомендуемый способ, если вы имеете доступ к файлу php.ini. Данный способ не сработает на многих платных хостингах провайдер, т.к. там закрывают доступ к этому файлу, в целях безопасности. Внимание! Данный способ затронет все ваши сайты и скрипты, находящиеся на сервере.

Откройте файл php.ini и найдите там строку memory_limit:

memory_limit = 256M

Через .htaccess в корне сайта

Добавьте в самом начале строку php_value memory_limit 256M. Во время выполнения PHP, запишите перед тяжелыми операциями в php-файл следующую строчку

<?php ini_set('memory_limit', '256M');?>

Как посмотреть, сработало ли?

Откройте в панели управления Joomla информацию о системе

И найдите строку memory_limit

Тоже самое можно сделать через команду <?php phpinfo();?>.

Если не получилось…

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

Альтернатива

Также оптимизации по памяти можно добиться установкой APC. Он уменьшает потребление памяти в ~1,5-2 раза и ускоряет работу всего сайта в целом. Для нормальной работы Joomla + JBZoo обычно хватает 64 Мб (с серьезным запасом на будущее).

Взял хостинг самый дешевый на unihost.com, залил онлайн игру — все работало с 128МБ ОЗУ. Затем при обращении к php файлу, который отвечает за связь с БД MySQL получил ошибку:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 43 bytes) in /var/www/user/data/www/site.ru/GameEngine/Database/db_MYSQL.php on line 2986 (Сегодня перешел на хостинг с 256МБ, не помогло ;-( )

Как решить проблему? Стоит ли переходить на хостинг с 384МБ ОЗУ?

Вот функция в которой происходит ошибка:

function mysql_fetch_all($result) {
        $all = array();
        if($result) {
            while($row = mysql_fetch_assoc($result)) { // 2986 строка
                $all[] = $row;
            }
            return $all;
        }
    }

ЮрийСПб's user avatar

ЮрийСПб

69.8k9 золотых знаков65 серебряных знаков122 бронзовых знака

задан 28 ноя 2013 в 11:46

spoilt's user avatar

7

Как несложно догадаться, веб приложение расходует всю память, доступную на виртуальном сервере. Посмотрев на приведенный вами код, становится ясно, что ошибка происходит при попытке перенести результат запроса к таблице БД в оперативную память на сервере. Очевидно, выборка задевает огромное количество записей( суммарный объем информации в которых = 268435456/1024/1024 = 256МБ !! ). Есть несколько выходов: ограничивать количество затрагиваемых запросом записей из таблицы( LIMIT, WHERE и т.д ) или же завести сервер с большим запасом ОЗУ. Предпочтительнее первый вариант, т.к в будущем вы обезопасите себя от возникновения подобной проблемы. Да и вообще, нужно следить за подобными вещами..

Здесь вот, к примеру, один только номер строки пугает:

<b>Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 43 bytes) in /var/www/user/data/www/site.ru/GameEngine/Database/db_MYSQL.php on line 2986</b>

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

ответ дан 28 ноя 2013 в 12:01

AseN's user avatar

AseNAseN

13.6k13 золотых знаков60 серебряных знаков122 бронзовых знака

2

Попробуйте добавить в самое начала index.php (расположенного в корне сайта) вот такую строчку. Память соответственно указать для своих целей.

<?php ini_set("memory_limit", "512M"); ?>

Или положить в корень сайта файл .htaccess следующего содержания:

php_value memory_limit 512M

Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP

Попробуйте использовать функцию mysql_fetch_row() вместо mysql_fetch_assoc()

ответ дан 28 ноя 2013 в 11:57

Артёмыч's user avatar

АртёмычАртёмыч

1,7024 золотых знака24 серебряных знака51 бронзовый знак

4

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

Если у вас возникает такая проблема, то можно сделать следующее:

  1. Попробовать самостоятельно изменить это значение, добавив в самое начало index.php (расположенного в корне сайта) следующие строчки:

    <?php ini_set("memory_limit", "512M"); ?>
    

    или же положив в корень сайта файл `.htaccess следующего содержания:

    php_value memory_limit 512M
    

    Если же такой файл уже есть в корне сайта — просто добавьте в него вышеприведенную строку.

  2. Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.

ответ дан 28 ноя 2013 в 12:03

terantul's user avatar

terantulterantul

3,24712 серебряных знаков18 бронзовых знаков

3

Очередная проблема в работе сайта принесла тему для нового поста — ошибка «Fatal error: Allowed memory size of«.  Пришлось оказать помощь товарищу с устранением этой неприятности.

fatal error wordpress

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

Суть такова: в консоли административной панели появляется ошибка:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1966080 bytes) in /home/username/public_html/wp-includes/class-simplepie.php on line 5410.

Цифры и путь ошибки могут и будут различаться. Более того, Ваш сайт может не загружаться, а браузер будет писать текст всё той же ошибки и при попытке входа в админку будет все тот же Fatal error.

Причина ошибки одна — CMS употребляет больше оперативной памяти, чем предоставляет хостинг. Чем это вызвано, тоже понятно: однозначно, плагины (изредка проблема возникает после обновления версии движка, но как правило в процессе активации, деактивированных перед обновлением WordPress плагинов).

Как исправить ошибку

А вот путей решения несколько. И один из них точно принесет результат. Также я расскажу как не допустить этой ошибки в будущем. Приступим.

Первый способ

Самый простой, но длительный по времени: написать в техподдержку компании, предоставляющей хостинг. Специалисты все исправят и вы вновь у руля. Однако, может случиться, что это поможет на 3-5 дней (как было у меня) и снова та же ошибка памяти. После 3-х писем в техподдержку мне посоветовали сменить CMS. Но я гордый и начал копать дальше.

Второй способ

Внести в файл .htaccess вашего сайта строку:

php_value memory_limit '64M'

Если файла .htaccess у вашего сайта нет, то сделайте его: берем пустой txt файл (файл блокнота) и вносим туда вышеуказанную строку. Затем переносим это дело с помощью FTP клиента на сервер и там переименовываем в .htaccess. Устанавливаем атрибуты 777, проверяем сработало или нет. Опять же зависит всё от хостинга. Если и это не помогло, то…

Третий способ

Похож на второй, только работаем в другими файлами. Открываете index.php в корне вашего сайта и добавляете в него следующий код:

define(‘WP_MEMORY_LIMIT’, ’64M’);

Разрешенный объем оперативки для сайта вырастет до 64 мегабайт. Для WordPress сайта этот же код вставьте в файл конфигурации wp-config.php. Если хостинг провайдер не выключил в настройках сервера поддержку ini_set, то проблема должна решиться.

Четвертый способ — лучший

Гарантировано избавит вас от ошибки, так как решает саму причину ошибки. Но, возможно, придется пожертвовать плагином. Заходим в админку вкладка «плагины» и начинаем по очереди их деактивировать, проверяя при этом, после каждой деактивации наличие ошибки. Плагин-проказник обязательно найдется, после этого активируйте все плагины, которые не вызывают ошибку.

Если сайт полностью лежит и нет возможности делать манипуляции с админкой, то зайдите на хостинг. Откройте папку wp-content/plugins, скопируйте все плагины к себе на компьютер и поочередно удаляйте один за другим, проверяя — заработал ли сайт.

Кстати, такое решение лечит и другие ошибки.

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

Профилактика ошибок памяти

Что для этого нужно? Ответ прост: постоянно видеть сколько памяти потребляет WordPress. Для этого придется покопаться в коде шаблона. Можно это сделать прямо из админки, раздел «Внешний вид» — «Редактор» — выбрать файл functions.php или через файловый менеджер по адресу …/wp-content/themes/ваша тема/functions.php (открыть с помощью Notepad++ или подобной программой). Перед закрывающим тегом ?> вставляем в файл код:

function usage () {printf (('%d / %s'), get_num_queries (), timer_stop (0, 3));
if ( function_exists ('memory_get_usage') ) echo ' / ' . round (memory_get_usage ()/1024/1024, 2) . 'mb '; }
add_action ('admin_footer_text', 'usage');

Данная функция будет выводить в футере администраторской панели WordPress информацию об объеме потребляемой сайтом памяти. В качестве бонуса вы увидите скорость загрузки страниц и количество запросов к базе данных.

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

Удачи на вашей охоте за прибылью!

Карта Tinkoff Black

  • Ошибка memory management после установки windows 10
  • Ошибка microsoft office 1049
  • Ошибка memory management windows 10 что это
  • Ошибка microsoft excel ожидает пока другое приложение завершит действие ole
  • Ошибка memory leak detected