Диагностика ошибок нехватки памяти в 1С-Битрикс

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Диагностика ошибок нехватки памяти в 1С-Битрикс
Как выявить ошибку нехватки памяти в CMS Битрикс

Ошибки нехватки памяти в CMS Битрикс могут возникать из-за  недостаточного выделения оперативной памяти для выполнения скриптов. Вот  основные шаги для выявления и устранения этой проблемы:
Изменено: Валерий Макеев - 29.09.2025 14:30:38
Этот код создает детализированный отчет об использовании памяти в различные моменты выполнения скрипта, показывая текущее и пиковое потребление памяти, изменение памяти с начала выполнения и предупреждает о приближении к лимиту, что помогает выявлять "узкие места" в компонентах Bitrix.
Скрипт имитирует обработку данных и показывает использование памяти на разных этапах.

Код
<?php
// Полный мониторинг потребления памяти с детализацией по компонентам и выводом в читаемом формате
define('MEMORY_LIMIT', ini_get('memory_limit'));

function formatMemory($bytes) {
    return round($bytes / 1024 / 1024, 2) . ' MB';
}

function memoryReport($label = '') {
    static $startMemory;
    
    if (!$startMemory) {
        $startMemory = memory_get_usage();
    }
    
    $current = memory_get_usage();
    $peak = memory_get_peak_usage();
    $diff = $current - $startMemory;
    
    echo "<div style='margin:10px; padding:10px; border:1px solid #ccc;'>";
    echo "<strong>$label</strong><br>";
    echo "Текущая память: " . formatMemory($current) . "<br>";
    echo "Пиковая память: " . formatMemory($peak) . "<br>";
    echo "Изменение: " . formatMemory($diff) . "<br>";
    echo "Лимит PHP: " . MEMORY_LIMIT . "<br>";
    
    // Предупреждение при приближении к лимиту
    if ($peak > getBytes(MEMORY_LIMIT) * 0.8) {
        echo "<span style='color:red;'>ВНИМАНИЕ: Близко к лимиту памяти!</span>";
    }
    echo "</div>";
    
    return $current;
}

function getBytes($value) {
    $unit = strtoupper(substr($value, -1));
    $bytes = (int)$value;
    
    switch ($unit) {
        case 'G': $bytes *= 1024;
        case 'M': $bytes *= 1024;
        case 'K': $bytes *= 1024;
    }
    
    return $bytes;
}

// Начало мониторинга
memoryReport('Начало выполнения');

// Имитация работы компонента Bitrix
$bigArray = array();
for ($i = 0; $i < 10000; $i++) {
    $bigArray[] = str_repeat('test_data_', 10) . $i;
}
memoryReport('После создания большого массива');

// Имитация обработки данных
$processedData = array_map(function($item) {
    return md5($item);
}, $bigArray);
memoryReport('После обработки данных');

// Очистка памяти
unset($bigArray, $processedData);
memoryReport('После очистки данных');

// Имитация работы с БД (запрос мог бы быть здесь)
memoryReport('Перед выполнением "запроса к БД"');

// Конец мониторинга
memoryReport('Конец выполнения');
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack

* на основе готовой верстки

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр