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

Проверка доступов

Первым делом стоит проверить папки где хранится кеш, а именно:

  • /bitrix/cache/
  • /bitrix/stack_cache/
  • /bitrix/html_cache/

Проверку можно осуществить вручную, либо при помощи встроенных инструментов. Для этого в административной панели сайта перейдите в раздел Настройки -> Инструменты -> Проверка системы, вам нужна вкладка «Проверка доступа», запустите полную проверку, если система не сможет получить доступ к ключевым разделам, в отчёте появятся адреса файлов и папок доступ к которым необходимо изменить.

Если система по какой-то причине не может выполнить тест, такую проверку можно осуществить вручную при помощи FTP менеджера. Права на файлы должны быть 0644, на папки 0755.

Проверка настройки компонентов

Ещё одной распространённой проблемой, является не верно настроенное кеширование компонентов. Рекомендуемый тип кеширование «Авто + управляемое», рекомендуемое время кеширования от 10 до 40 часов. Некоторые программисты могут просто напечатать несколько лишних нулей в параметрах кеширования. В моей практике был случай когда коллеги ошиблись и указали кеш в 36 миллионов секунд, а это ~14 месяцев. Естественно кеш за это время скопился просто гигантский, порядка 100 гигабайт.

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

Функцию необходимо добавить в файл init.php, а так же создать агента в списке агентов. Рекомендуется так же перевести работу агентов на cron.


/**
 * Агент, очистка устаревшего кеша
 * @return string
 */
function clearExpiredCacheFiles()
{
    if (!class_exists('CFileCacheCleaner')) {
        require_once ($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/classes/general/cache_files_cleaner.php');
    }

    $curentTime = mktime();
    $endTime = time() + 5;
    $path = '';

    //Работаем с устаревшим кешем
    $obCacheCleaner = new CFileCacheCleaner('expired');
    if (!$obCacheCleaner->InitPath($path)) {
        \CEventLog::Add([
            'SEVERITY' => 'ERROR',
            'AUDIT_TYPE_ID' => 'clearExpiredCacheFiles',
            'MODULE_ID' => 'main',
            'ITEM_ID' => __CLASS__,
            'DESCRIPTION' => 'Неверный путь к файлу кеша',
        ]);
    }
    $obCacheCleaner->Start();
    while ($file = $obCacheCleaner->GetNextFile()) {
        if (is_string($file)) {
            $date_expire = $obCacheCleaner->GetFileExpiration($file);
            if ($date_expire) {
                if ($date_expire < $curentTime) {
                    unlink($file);
                }
            }
            if (time() >= $endTime) break;
        }
    }

    return 'clearExpiredCacheFiles();';
}


Для удобства контроля размера папок с кешем можно использовать следующие SSH компанды:


du -hs * | sort -hr


Проверка файлов result_modifier.php

Некоторые программисты только начинающие работать с 1С Битрикс, иногда в файле result_modifier.php вытаскивают их БД огромное количество информации, которая в последствии нигде не используется. В битриксе есть такой метод как SetResultCacheKeys() который позволяет кешировать только то, что необходимо.

Следует проверить все файлы result_modifier.php компонентов используемых на сайте на наличие этого метода, если его нет, нужно детально проанализировать код, чтобы понять что в конечном итоге попадает в кеш компонента, если там есть что-то лишнее (данные которые не используются в шаблоне и файле component_epilog.php) — необходимо оптимизировать код. Общий вид кода при использовании SetResultCacheKeys() выглядит так:


/*Что-то получаем в result_modifier.php и сохраняем в $arResult["DATA"]*/
	
$arResult["DATA"] = $data; //$data - это ранее полученные данные
$this->__component->SetResultCacheKeys(["DATA"]);

Заключение

Самый лучший способ не сталкиваться с проблемой с кешем — профилактика и тестирование проекта при сдаче. Для этого в 1С Битрикс есть встроенные средства проверки качества + ваши прямые руки. Желаю удачи!

Вам также могут понравиться

Исключения в PHP, что это и как ими пользоваться

Исключения в PHP, что это и как ими пользоваться

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

Загрузка файлов на сервер средствами PHP

Загрузка файлов на сервер средствами PHP

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

Современные способы заработка на сайтах

Современные способы заработка на сайтах

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


Комментарии
Защита от автоматических сообщений
CAPTCHA
Введите слово на картинке

Самые читаемые

Тонкая настройка SEO для результатов фильтрации каталога битрикс

Тонкая настройка SEO для результатов фильтрации каталога битрикс

Одним из преимуществ интернет-магазинов на 1С Битрикс на мой взгляд является наличие не так давно до...

Основы SEO оптимизации сайта

Основы SEO оптимизации сайта

Эта статья не истина в последней инстанции, а лишь набор правил которые я применяю при создании/испр...

Собственный тип пользовательских полей в 1С Битрикс

Собственный тип пользовательских полей в 1С Битрикс

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