Ошибка Fatal error: Allowed memory size

Редактор: Дмитрий Сокол 11475 8 мин Аудио

Одна из часто встречающихся ошибок, возникающих при открытии страниц сайтов, сделанных на популярном языке программирования PHP, - это ошибка исчерпания лимита памяти. Она выглядит на экране как надпись, которая начинается с текста на английском: “Fatal error: Allowed memory size...“

 

На приведенном примере видно, что движок PHP при обработке данной страницы попытался использовать память свыше установленного лимита в 256 мегабайт (268435456 байт). Откуда же взялся этот лимит, почему он превышен и как избавиться от подобных ошибок?

Важно! memory_limit/лимит памяти - ограничение для использования оперативной памяти в движке PHP. Может иметь различные цифровые значения в зависимости от настройки PHP на конкретном сервере.

Почему это происходит?

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

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

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

Как исправить ошибку “Fatal error: Allowed memory size”?

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

Важно! CMS - система управления контентом - набор скриптов для создания, редактирования и управления контентом сайта. Примерами популярных CMS являются WordPress, Joomla, OpenCart.

Многие хостинг-провайдеры разрешают пользователю изменять настройки PHP с помощью файлов конфигурации. И тем более изменение настроек необходимо, если используется собственный виртуальный сервер VDS.

Прежде всего следует уточнить действующие лимиты для PHP. Для этого можно создать на хостинге в каталоге с сайтом файл info.php следующего содержания (см. ниже) и открыть его в браузере. 

<?php
phpinfo();
?>

 

 

Функция “phpinfo();“ заставит движок PHP сгенерировать страницу с подробным отчетом о всех настройках, лимитах и подключенных модулях. Находим на странице строку memory_limit и убеждаемся, что лимит памяти нужно увеличить.

 

В случае виртуального сервера надо будет отредактировать файл php.ini, найти в нем строку memory_limit, при необходимости раскомментировать ее (убрать точку с запятой в начале строки) и установить нужное значение. Например:

memory_limit = 512M

 

Это означает установку лимита памяти в 512 мегабайт. После этого перезапускаем веб-сервер, снова открываем в браузере страницу info.php и убеждаемся, что лимит увеличился.

Расположение php.ini можно узнать с помощью все того же php_info.

Так:

 

или так:

 

В случае виртуального хостинга от провайдера возможность изменения лимита может зависеть от провайдера. В настоящее время все больше и больше виртуальных хостингов используют в качестве ОС CloudLinux. Эта операционная система позволяет создавать изолированные окружения - своего рода VPS - и довольно гибко менять параметры внутри них.

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

 

 

Таким образом, если у вашего хостера CloudLinux, то просто увеличьте значение memory_limit в настройках используемой версии PHP.

Но если у хостера не CloudLinux, то можно использовать несколько маленьких хитростей.

Файл .htaccess

На хостингах для настроек сайта практически всегда можно использовать “волшебный” файл .htaccess, в котором нужно будет прописать строку вида:

php_value memory_limit 512M

 

Если после редактирования файла .htaccess браузер показывает ошибку “500 - Internal Server Error”, это означает, что строка конфигурации прописана с ошибкой или же хостинг-провайдер не разрешает увеличение лимита, и необходимо убрать все сделанные изменения в этом файле.

 

Функция ini_set()

Второй способ уже затрагивает непосредственно программирование на языке PHP. Необходимо добавить в .php-файл установку лимита памяти. Делается это путем размещения в начале .php-файла строки вида:

ini_set(‘memory_limit’,’512M’);

 

 

Эта настройка будет работать только для конкретной страницы сайта.

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

Оптимизация алгоритмов и данных

 

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

Часто бывает так, что файл с данными загружается в память целиком с помощью функций языка PHP file() или file_get_contents(), что вызовет ошибку в случае больших файлов. Надо изменить алгоритм таким образом, чтобы данные читались небольшими порциями или построчно.
 
Также исчерпание лимита памяти часто встречается при обработке файлов .xml с данным для сайта, например, каталога товаров. В библиотеку языка PHP встроено несколько функций для обработки XML, и стоит выбрать для использования тот вариант, что требует меньшего количества памяти.

Важно! XML - это специальный формат файлов, который содержит структурированные текстовые данные и популярен для обмена информацией между сайтами.

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

Полезно использовать специальный параметр LIMIT в SQL-запросе для ограничения числа строк данных, получаемых с запросом.

Важно! SQL - это язык запросов к базам данных, например, к MySQL, который используется практически во всех популярных движках и CMS. 

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

Использование настроек CMS 

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

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

 

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

Использование оптимизаторов кода

Для языка PHP существуют дополнения (extensions), которые позволяют оптимизировать исполняемый код страницы прозрачно для разработчика и тем самым снимают требования к памяти. К числу таких дополнений относятся, например, OPcache или APCu. На виртуальном сервере нужные дополнения к движку PHP устанавливает сам администратор, а для виртуального хостинга необходимо, чтобы эти дополнения были настроены провайдером.

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

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

К счастью, некоторые провайдеры услуг хостинга предусмотрели такую ситуацию. Они предоставляют функцию turbo-boost, которая увеличивает лимиты памяти и максимального времени выполнения скриптов для конкретного сайта в течение некоторого времени, например, на два часа после активации. 

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

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

Если ошибку лимита памяти не получается исправить самостоятельно, то в случае использования виртуального хостинга следует обратиться в техническую поддержку. Специалисты смогут уточнить, какие ограничения существуют в рамках текущего тарифного плана, на какой тариф лучше перейти с учетом используемой CMS и нагрузки на сайт. Они смогут помочь, если требуется единичный запуск нужного скрипта, который не проходит из-за данных ограничений.

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

При возникновении этой проблемы на виртуальном сервере VDS может потребоваться помощь специалиста по администрированию серверов. Специалисты техподдержки провайдера хостинга также могут помочь выполнить нужные настройки сервера.

Дмитрий Сокол
Не нашли ответ на свой вопрос?
Задайте его экспертам! Ответ приходит очень быстро и прямо на ваш email.

Добавляя подтверждение "Я не робот" вы так же даете согласие получать сообщения от ru.hostings.info и принимаете его Политику конфиденциальности, позволяя ru.hostings.info хранить и обрабатывать вашу личную информацию, указанную выше, для предоставления вам запрашиваемого контента.

Рейтинги хостинг-провайдеров по задачам сайта
Марта
Панель управления

От панели управления зависит ваше удобство в настройке хостинге\сайта.

Большинство качественных хостингов из нашего ТОПа используют удобные панели управления, поэтому рекомендуем больше внимания уделить другим параметрам при выборе.

Вид хостинга

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

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

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

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

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

CMS

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

Тип виртуализации

Виртуализация - это создание виртуальной среды на физическом сервере, позволяющая запускать требуемые ПО без затрагивания процессов, совершаемых другими пользователями сервера.  С её помощью ресурсы физического сервера распределяются между виртуальными (VPS/VDS). Основные виды: аппаратная (KVM), паравиртуализация, виртулизация на уровне ОС (OpenVZ).

Прочее

Абузоустойчивый хостинг - компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).

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

Безопасный хостинг - тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их "лечить".

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

Бесплатный тест

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

Moneyback - период на протяжении которого хостер обязуется вернуть деньги, если вам не понравится хостинг.

Региональные
Цена

Настоятельно рекомендуем не покупать слишком дешевый хостинг! Как правило с ним очень много проблем: сервер иногда не работает, оборудование старое, поддержка долго отвечает или не может решить проблему, сайт хостера глючит, ошибки в регистрации, оплате и т.д.

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

Технологии и ОС

На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.

ASP.NET - платформа для разработки веб-приложений от Майкрософт.

ОС - операционная система, установленная на сервере хостинга. Мы рекомендуем размещать на серверах с Linux, если нет особых требований у разработчиков сайта.

Тип диска