Управление файлами cookie, которые используются для рекламы, таких как персонализация рекламы, ремаркетинг и анализ эффективности рекламы.
2.4.3.8. Ошибка Fatal error: Allowed memory size
Ошибка «Fatal error: Allowed memory size» означает, что скрипт в процессе своей работы превысил значение параметра PHP memory_limit текущего тарифного плана.
Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes) in /home/example/example.com/www/path/to/script.php on line Z
Х— доступный объём памяти, заданный параметром PHP memory_limit, в байтах.Y— объём памяти, который скрипт пытался использовать сверх доступного объёма в момент возникновения ошибки, в байтах./home/example/example.com/www/path/to/script.php— полный путь к скрипту, при выполнении которого возникла ошибка.Z— номер строки в скрипте, где возникла ошибка.
Внимание!
Сумма значенийX + Y не является требуемым значением memory_limit, поскольку Y показывает количество памяти, которого не хватило на момент аварийного завершения скрипта, и в случае дальнейшей работы скрипт может затребовать гораздо больший объем памяти.
Возможные причины
Чаще всего ошибка возникает в следующих ситуациях:
- Самая распространённая ситуация, при которой скрипт исчерпывает всю доступную память, это работа с изображениями. Форматы PNG и JPG сжимают изображение, но для работы с ним PHP загружает его в память попиксельно, будто оно сохранено в формате BMP. Это приводит к тому, что скрипту не хватает памяти для обработки изображения. Чтобы ошибка не возникала, стоит уменьшать размеры изображений перед их загрузкой на сайт и не рассчитывать на то, что PHP сам изменит формат изображений в высоком разрешении.
- Выполнение запросов к базе данных, возвращающих слишком большие объёмы информации, которые не вмещаются в доступную память.
- Обработка XML-файлов большого объёма.
- Запуск требовательных к ресурсам или просто неоптимизированных скриптов и модулей.
Варианты решения
Решением проблемы может быть:
- Изменение значения memory_limit в настройках PHP, если установлено не максимально доступное по текущему тарифу значение.
- Если на сайте используются скрипты морально устаревших версий, обязательно проверьте, соответствует ли установленная для сайта версия PHP рекомендованной разработчиком сайта. Если нет, смените её на нужную и проверьте работу сайта примерно через 10-15 минут.
- Уменьшение размера обрабатываемых скриптом файлов, анализ работы и оптимизация самого скрипта или модуля с целью уменьшения потребления им памяти.
- Смена тарифа на другой, с большим значением memory_limit.
Внимание!
При смене тарифного плана следует учитывать, что это поможет лишь в случаях, когда требования к памяти предъявляются разработчиками СМS, а также в некоторых случаях обработки больших файлов. В случае требовательного к ресурсам скрипта (как правило самописного) исправлять нужно сам скрипт.
Примечание для WordPress: если размер фактически выделенной памяти (значение Х) меньше значения PHP memory_limit используемого тарифного плана, необходимо в файл wp-config.php добавить строку:
define('WP_MEMORY_LIMIT', 'xxxM');
Где xxx — значение memory_limit тарифного плана.