Оптимизация размера сайта на платформе 1С-Битрикс
Invite pending
Доля использования 1С-Битрикс в рунете продолжает расти, поэтому все чаще приходится сталкиваться с этой cms при администрирование веб-серверов. У этой cms (как и у других) существует много проблем, и я бы хотел рассказать об одной из них, с которой столкнулся уже несколько раз — это большой размер, занимаемый сайтом на cms 1C-Битрикс:

На одном из серверов, которые находятся у меня на администрировании, посыпались ошибки БД. Практически сразу было выяснено, что причина ошибок — отсутствие свободного места на хостинге. Почистив ненужные файлы и временно вернув работоспособность серверу, я сел думать, что можно удалить еще? Проблема осложнялась тем, что хостер не мог увеличить размер раздела, то есть выход оставался один — освобождать место удалением файлов, либо переносом сайтов с сервера.
Следует отметить, что подавляющее большинство сайтов на сервере были созданы на основе 1С-Битрикс, которая имеет свои особенности в плане дискового пространства:
Проведем небольшой опыт.
Разворачиваем пустой сайт, используя скрипт bitrixsetup.php с официального сайта. Для установки выбираем версию «Малый бизнес». Выбор кодировки — cp1251
После установки сайт, абсолютно не содержащий контента занимает ~366Мб.
Из них демо-данные занимают ~108Мб
Примерное число сайтов на хостинге у нас около ста. Таким образом, удалив соответствующие папки, мы освобождаем около 10Гб дискового пространства. Хочу отметить, что данные каталоги так же попадают в архивы резервных копий, создаваемые в папке сайта, увеличивая их на 50-100Мб.
На скорую руку был написан скрипт для поиска проблемных папок на сервере, которым мне бы и хотелось поделиться:
Скрипт запускается с параметром, содержащим путь к папке, в которой будет происходить поиск.
При указании вторым параметром --remove, найденные папки будут автоматически удалены.

Как системные администраторы сталкиваются с этой проблемой?
На одном из серверов, которые находятся у меня на администрировании, посыпались ошибки БД. Практически сразу было выяснено, что причина ошибок — отсутствие свободного места на хостинге. Почистив ненужные файлы и временно вернув работоспособность серверу, я сел думать, что можно удалить еще? Проблема осложнялась тем, что хостер не мог увеличить размер раздела, то есть выход оставался один — освобождать место удалением файлов, либо переносом сайтов с сервера.
Следует отметить, что подавляющее большинство сайтов на сервере были созданы на основе 1С-Битрикс, которая имеет свои особенности в плане дискового пространства:
- Во первых, платформа Битрикс компенсирует проблемы производительности, используя кэш, который при дефолтных настройках представляет собой файловый кэш в папке сайта. Это объясняет регулярное увеличение занимаемого дискового пространства на хостинге. Это составляло большую проблему на старых версиях платформы, доходило до того, что сайт размером ~200Мб создавал кэш размеров в ~600Мб. Точно утверждать не могу, но у меня сложилось ощущение, что такое поведение было исправлено только в версии 14.0
- Во вторых, сам дистрибутив 1С-Битрикс содержит много лишних файлов. В частности это — несколько демо-сайтов для разработчиков в каждом дистрибутиве платформы. Опытные разработчики сразу удаляют их (папки /bitrix/wizards/bitrix/demo, /bitrix/modules/bitrix.eshop, /bitrix/modules/bitrix.sitecorporate), но это происходит далеко не всегда.
Проведем небольшой опыт.
Разворачиваем пустой сайт, используя скрипт bitrixsetup.php с официального сайта. Для установки выбираем версию «Малый бизнес». Выбор кодировки — cp1251
После установки сайт, абсолютно не содержащий контента занимает ~366Мб.
366M new
Из них демо-данные занимают ~108Мб
55M new/bitrix/wizards
11M new/bitrix/modules/bitrix.sitecorporate
42M new/bitrix/modules/bitrix.eshop
Примерное число сайтов на хостинге у нас около ста. Таким образом, удалив соответствующие папки, мы освобождаем около 10Гб дискового пространства. Хочу отметить, что данные каталоги так же попадают в архивы резервных копий, создаваемые в папке сайта, увеличивая их на 50-100Мб.
На скорую руку был написан скрипт для поиска проблемных папок на сервере, которым мне бы и хотелось поделиться:
#!/bin/bash
if [ -z "$1" ];
then
echo "please, use this with web-root path as first argument"
echo "for removing files use --remove as second argument"
exit 1
fi
#путь к web-root
path=$1
find $path -name "wizards" -prune -type d -print0 | grep -FzZ 'bitrix/wizards' | xargs --null -0 du -sh
find $path -name "bitrix.sitecorporate" -prune -type d -print0 | xargs --null -0 du -sh
if [[ "$2" == "--remove" ]];
then
find $path -name "wizards" -prune -type d -print0 | grep -FzZ 'bitrix/wizards' | xargs --null -0 rm -rf
find $path -name "bitrix.sitecorporate" -prune -type d -print0 | xargs --null -0 rm -rf
fi
exit 0
Скрипт запускается с параметром, содержащим путь к папке, в которой будет происходить поиск.
При указании вторым параметром --remove, найденные папки будут автоматически удалены.