UPD. Если вы столкнулись с проблемой разрастания файлового кэша, скорее всего, ваш проект не оптимизирован и работает не корректно. Как правило, для крупных проектов используются быстрые диски SSD/NVME, которые стоят дорого и неразумно забивать пространство кэшем в размерах от 100Гб. Правильным решением будет перенести кэш в RAM. Рассмотрим memcached в нашей статье "Memcache — замена способа хранения кэша из файловой системы в оперативную память".
Как часто вы очищаете кэш "Битрикс"? И знаете ли, что это нужно делать регулярно?
В этой статье наш эксперт Антон Моисеев расскажет для чего нужно чистить кэш, а также подробно со скриншотами покажет 100% работающий метод настройки регулярной автоматической очистки кэша сайтов "1С-Битрикс", который с успехом был применён командой ALFA IT STUDIO для крупного интернет-магазина alfaopt.com.
Зачем регулярно очищать кэш "Битрикс"
Настраиваем автоматическое удаление кэша на 1С-Битрикс
Перейдите на панели администрирования в Настройки (1) → Настройки продукта (2) → Автокеширование (3). Откройте вкладку «Очистка файлов кеша» и выберите (4):
- Только устаревшие.
- Все.
- Меню – в случае, если проводите проверки доступа к его пунктам.
- Весь управляемый – файлы раздела /bitrix/managed_cache/.
- Все страницы HTML кеша.
Папка /bitrix/cache/ растет
В папке /bitrix/cache/ находятся файлы неуправляемого кэша. Она может увеличиваться в объеме, если при создании файлов устанавливаются права без возможности их последующего изменения и удаления.
При назначении прав на файлы и папки используются значения констант BX_FILE_PERMISSIONS и BX_DIR_PERMISSIONS из /bitrix/php_interface/dbconn.php. но часто срабатывает маска прав на сервере и чтобы избежать этого необходимо прописать в этом же скрипте:
umask(000); @umask(~BX_DIR_PERMISSIONS);
Не удаляется устаревший кэш
Для удаления устаревшего кэша нужно добавить нового агента. Перейдите в Настройки (1) → Настройки продукта (2) → Агенты (3) и выберите «Добавить агента» (4).
В открывшейся вкладке задайте настройки для агента (1-4):
- Функция агента – clean_expire_cache();
- Сортировка – 100.
- Интервал – 10.
- Модуль – main
Прочитав много статей по схожим проблемам, не увидел указание модуля - main. Обратите на это внимание!
Сохраните нового агента.
Далее перейдите в /bitrix/php_interface/. Найдите файл init.php.
В файл вставьте:
if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time()+5; //Если на кроне, то работает 5 секунд else $endTime = time()+1; //Если на хитах, то не более 1 секунды
Время работы скрипта зависит от того, исполняется он на Cron или нет. Если скрипт исполняется не на Cron, то время исполнения назначается в 1 секунду.
Если файла init.php нет, то создайте его и вставьте:
<?
function clean_expire_cache($path = "") {
if (!class_exists("CFileCacheCleaner")) {
require_once ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/cache_files_cleaner.php");
}
$curentTime = mktime();
if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time() + 5; //Если на кроне, то работает 5 секунд
else $endTime = time() + 1; //Если на хитах, то не более 1 секунды
//Работаем со всем кэшем
$obCacheCleaner = new CFileCacheCleaner("all");
if (!$obCacheCleaner->InitPath($path)) {
//Произошла ошибка
return "clean_expire_cache();";
}
$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;
}
}
if (is_string($file)) {
return "clean_expire_cache(\"" . $file . "\");";
}
else {
return "clean_expire_cache();";
}
}
Чистим кеш крупного интернет-магазина
Данным методом решили накопление огромного кэша у нашего клиента - компании ООО "ОС АЛЬФАСНАБ".
Сайт https://alfaopt.com
Кэш за несколько суток мог превышать ~500гб, как видим на скриншоте ниже до ручного удаления кэш составляет ~500гб
Обращаем внимание на столбец Used раздела vda1
После внедрения агента удаления кэша, у клиента максимальный размер составил ~150гб.
Обращаем внимание на столбец Used раздела vda1
Проблема решена, сайт работает стабильно, данные отображаются в реальном времени. В итоге - клиент доволен.
автор статьи: Антон Моисеев
Если у вас возникают проблемы с работой системы "1С-Битрикс", необходимы доработки и уникализация по запросы вашего бизнеса, обращайтесь!
Команда ALFA IT STUDIO постоянно решает сложные задачи и помогает своим клиентам вывести прибыльность на новый уровень.