1С-Битрикс

Ошибка нехватки памяти E_ERROR Allowed memory size в 1С-Битрикс: диагностика и решение

Решение ошибки Allowed memory size exhausted в 1С-Битрикс при переходе между страницами. Диагностика и способы увеличения доступной памяти PHP

sqlka.ruОпубликовано: Чтение: 3 мин.
Ошибка нехватки памяти E_ERROR Allowed memory size в 1С-Битрикс: диагностика и решение

Ошибка «Allowed memory size exhausted» в 1С-Битрикс: причины и решение

Типичная ошибка, с которой сталкиваются владельцы сайтов на 1С-Битрикс при навигации по страницам:

[ErrorException] E_ERROR
Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes) (0)
/home/bitrix/www/bitrix/modules/main/lib/text/stringhelper.php:78

Эта ошибка означает, что скрипт исчерпал лимит доступной оперативной памяти (в данном случае 256 МБ) при попытке выделить дополнительные 20 КБ. Рассмотрим, почему это происходит и как исправить проблему.

Что означает ошибка?

Каждый PHP-скрипт имеет ограничение на использование оперативной памяти, заданное параметром memory_limit. Когда выполнение скрипта требует больше памяти, чем разрешено, возникает фатальная ошибка. В контексте Битрикс это часто происходит при:

  • Обработке больших массивов данных (каталоги товаров, пользователи);
  • Работе с изображениями высокого разрешения;
  • Выполнении сложных SQL-запросов;
  • Некорректной работе компонентов или модулей.

Причины возникновения ошибки

1. Недостаточный лимит памяти

Стандартные настройки хостинга часто устанавливают memory_limit = 128M или 256M, что может быть недостаточно для ресурсоёмких операций Битрикс, особенно с установленными модулями.

2. Проблемы в коде или модулях

Ошибка в файле stringhelper.php:78 указывает на проблему при обработке строковых данных. Это может быть вызвано:

  • Обработкой огромных строк или текстовых полей;
  • Рекурсивными функциями без контроля глубины;
  • Утечкой памяти в кастомном коде или модуле.

3. Одновременная обработка больших данных

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

Пошаговое решение проблемы

Шаг 1: Временное увеличение memory_limit

Быстрое решение — увеличить лимит памяти в настройках PHP. Создайте или отредактируйте файл /bitrix/php_interface/after_connect.php:

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

Или добавьте в .htaccess (для Apache):

php_value memory_limit 512M

Шаг 2: Поиск проблемного кода

  1. Включите отладку, добавив в /bitrix/.settings.php:
    'exception_handling' => [
        'debug' => true,
        'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_DEPRECATED,
        'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_DEPRECATED,
    ],
  2. Проверьте, на какой именно странице возникает ошибка — это поможет локализовать проблемный компонент.
  3. Временно отключите недавно установленные или обновлённые модули.

Шаг 3: Оптимизация компонентов

Для компонентов, работающих с большими объёмами данных:

  1. Включите постраничную навигацию;
  2. Установите разумные ограничения на количество выводимых элементов;
  3. Включите кеширование компонента.

Шаг 4: Оптимизация обработки изображений

Если ошибка возникает при работе с изображениями:

  1. Проверьте настройки модуля «Инфоблоки» → «Настройки модуля» → «Максимальный размер изображения для ресайза»;
  2. Уменьшите максимальный размер обрабатываемых изображений;
  3. Используйте асинхронную обработку больших изображений.

Шаг 5: Проверка пользовательского кода

Проанализируйте кастомный код на наличие:

  • Рекурсивных функций без ограничений;
  • Обработки огромных массивов в памяти;
  • Сохранения больших объектов в сессиях.

Диагностика утечек памяти

Для глубокой диагностики используйте:

  1. Встроенный профайлер Битрикс (включите в настройках производительности);
  2. Xdebug с функцией трассировки памяти;
  3. Мониторинг использования памяти через панель управления хостингом.

Рекомендуемые настройки memory_limit

Для разных типов проектов:

  • Сайт-визитка: 128M–256M;
  • Интернет-магазин до 1000 товаров: 256M–512M;
  • Крупный магазин или портал: 512M–1G.

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

  1. Проведите нагрузочное тестирование с помощью Apache JMeter или аналогичных инструментов;
  2. Проанализируйте логи PHP и веб-сервера на предмет других ошибок;
  3. Рассмотрите возможность горизонтального масштабирования или оптимизации архитектуры.

Профилактика подобных ошибок

Для стабильной работы сайта важно:

  • Регулярно обновлять ядро Битрикс и модули;
  • Проводить аудит кода перед добавлением на рабочий сайт;
  • Использовать мониторинг ресурсов сервера;
  • Настроить автоматическое оповещение при достижении 80% лимита памяти.

Правильная настройка лимитов памяти и оптимизация кода помогут избежать ошибок типа «memory size exhausted» и обеспечат стабильную работу вашего сайта даже при высоких нагрузках.

Хотите освоить SQL для работы с данными?

В SQLka можно изучать SQL последовательно или готовиться к собеседованиям. Запросы выполняются прямо в браузере — устанавливать базу данных не нужно.

sqlka.ru

support@sqlka.ru

Дальше по теме

1С-Битрикс

Логирование в 1С-Битрикс: полное руководство для разработчика

Полное руководство по логированию в 1С-Битрикс: какие логгеры есть, как их настроить, форматировать сообщения и подключать к своим классам. Примеры кода и советы по использованию PSR-3

sqlka.ruЧтение: 4 мин.
← Все статьи