Бесплатный экспресс-аудит сайта Безопасность, SEO, AI-поиск и 152-ФЗ — отчёт с баллами за минуту Проверить сайт
Обсудить проект

Кончилось место на сервере BitrixVM: что проверить и что почистить

Оценить статью

Место на сервере кончается тихо: сайт начинает отдавать ошибки, обмен с 1С падает, база перестаёт писать — а причина в том, что на разделе не осталось свободных мегабайт. Ниже — как посмотреть, чем он занят, что можно удалять, а что трогать нельзя.

Нехватка места на сервере редко выглядит как нехватка места. Сначала падает что-то другое, и час уходит на поиски не там.

Как это проявляется

Что видитеЧто на самом деле
[Bitrix\Main\DB\ConnectionException] Mysql connect errorБаза остановилась, потому что ей некуда писать
The table 'b_iblock_element_property' is fullТа же причина: место кончилось, таблица не растёт
Ошибка с кодом 28Системный код «на устройстве не осталось места»
nginx не запускается после перезагрузкиНе смог записать свои файлы при старте
Не продлевается сертификатПроцедуре выпуска некуда сохранить результат
Сайт открывается, но не сохраняются файлы и картинкиМесто кончилось только что, база пока держится

Поэтому при любой непонятной аварии первая команда — не разбор журналов, а проверка места.

Посмотреть, сколько места и где

Если доступа по SSH нет, а в административную часть вы попадаете, ту же команду можно выполнить в php-консоли: print_r(shell_exec('df -h'));

df -h

Смотрите все строки, а не только корневую: разделов на сервере обычно несколько, и забиться может тот, что с базой или с журналами, пока в корне ещё свободно.

Дальше ищем виновника сверху вниз:

du -sh /home/bitrix/* | sort -h
du -sh /var/log/* | sort -h
du -sh /var/lib/mysql/* | sort -h

Что обычно занимает место

ЧтоГдеМожно ли удалять
Резервные копии продукта/home/bitrix/www/bitrix/backup/Да, кроме нужных. Хранить их на том же диске — плохая идея
Двоичные журналы базыкаталог данных MySQLТолько средствами базы, не удалением файлов
Кеш компонентов/home/bitrix/www/bitrix/cache/Да, пересоздаётся
Управляемый кеш/home/bitrix/www/bitrix/managed_cache/Да
Кеш уменьшенных картинок/home/bitrix/www/upload/resize_cache/Да, но пересоздание нагружает сервер
Файлы обмена с 1С/home/bitrix/www/upload/1c_catalog/Старые — да
Журналы системы и веб-сервера/var/log/Старые — да, лучше настроить ротацию

С чего начинать чистку

Порядок — от безопасного к осторожному. После каждого шага смотрите df -h: если место вернулось, дальше можно не идти.

  1. Резервные копии продукта. Каталог bitrix/backup/ внутри сайта — первое, куда стоит заглянуть: один полный архив весит почти столько же, сколько сам сайт. На нашей машине там два месяца лежал архив на 906 МБ при размере сайта 3 ГБ. Копии нужны, но не на том же диске, что и сайт.
  2. Кеш компонентов и управляемый кеш. Пересоздаются сами, удалять можно на работающем сайте:
    rm -rf /home/bitrix/www/bitrix/cache/*
    rm -rf /home/bitrix/www/bitrix/managed_cache/*
    rm -rf /home/bitrix/www/bitrix/stack_cache/*
    Путь зависит от того, где лежит сайт: на машине с несколькими сайтами это /home/bitrix/ext_www/<домен>/.
  3. Кеш уменьшенных картинок — upload/resize_cache/. Удаляется безопасно, но пересобирается при первых же посещениях и нагружает процессор, поэтому в час пик его лучше не трогать.
  4. Файлы обмена с 1С — upload/1c_catalog/ и каталоги выгрузок. Там копятся файлы прошлых обменов, иногда по гигабайту и больше.
  5. Журналы. Про них ниже отдельно: чаще всего самым большим каталогом на машине оказываются именно они.

Журналы веб-сервера: сначала проверьте ротацию

На машине, с которой писался этот разбор, каталог /var/log занимал 2,7 ГБ — больше, чем весь сайт. Из них 2,2 ГБ приходилось на журналы nginx, а один файл доступа дорос до 1,2 ГБ за два месяца.

Дело было не в посещаемости: ротация не отработала ни разу. Проверяется это одной командой:

ls /var/log/nginx/ | grep -c '\.gz$'

Ноль в ответе означает, что старые журналы не упаковываются и не удаляются — правило ротации в системе есть, а выполнять его некому. Дальше смотрите, жив ли планировщик и что он собирается делать:

systemctl list-timers 'logrotate*'
logrotate -d /etc/logrotate.conf

Вторая команда показывает действия logrotate, ничего не меняя.

Вторая ловушка — журналы отдельного сайта: их заводит его собственная конфигурация, имена у них свои, владелец root, и под общее правило они попадают не всегда. Сверьте пути из конфигурации сайта с маской в /etc/logrotate.d/nginx.

Ещё два файла растут незаметно. /var/log/cron: на виртуальной машине Битрикса агенты запускаются раз в минуту, и каждый запуск оставляет запись. /var/log/btmp: неудачные попытки входа. Если второй распух до сотен мегабайт, по SSH кто-то перебирает пароли — чистка файла такой симптом не лечит.

Двоичные журналы базы — частый сюрприз

На виртуальных машинах Битрикса включено ведение двоичного журнала MySQL: он нужен для репликации и восстановления на точку во времени. Настройки лежат в отдельном файле конфигурации (на машинах вендора это bx_replica.cnf), и если срок хранения не ограничен, журналы спокойно съедают десятки гигабайт.

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

Чего делать нельзя

  • Удалять файлы базы руками. Табличные файлы и журналы чистятся только средствами самой базы, иначе она не поднимется.
  • Чистить /upload/ целиком. Там файлы сайта: картинки товаров, документы, вложения. Кеш — только подкаталог resize_cache.
  • Удалять каталоги ядра, чтобы освободить место: продукт не запустится, восстанавливать придётся из копии.
  • Удалять журнал, который ведётся прямо сейчас. Пока служба держит файл открытым, место не вернётся, даже если файла уже нет в каталоге. Обнуляйте его — truncate -s 0 /var/log/nginx/access.log — или перезапускайте службу после удаления.

Когда освободили, а не помогло

Типичная картина: место освободили, а база всё равно не стартует или сайт отдаёт ошибку. Проверьте:

  1. Перезапущены ли службы. База, упавшая от нехватки места, сама не поднимется.
  2. Тот ли раздел вы чистили. Вывод df -h после чистки должен показывать свободное место именно там, где его не было.
  3. Не осталось ли удалённых, но открытых файлов. Пока процесс держит удалённый журнал, место не возвращается — помогает перезапуск службы.
  4. Не кончились ли иноды. Место есть, а файлы не создаются: смотрите df -i. Обычно это миллионы мелких файлов кеша.

Чтобы не повторялось

  1. Перенесите резервные копии с сервера: копия рядом с сайтом не спасёт при отказе диска и занимает место.
  2. Ограничьте срок хранения двоичных журналов базы.
  3. Настройте ротацию журналов системы и веб-сервера.
  4. Поставьте оповещение о свободном месте: предупреждение за неделю до аварии стоит дешевле самой аварии.

Если чистить уже нечего, диск пора расширять — порядок в отдельной инструкции. А если место съедает база, смотрите разбор про размер базы Битрикс24.

Статья была полезна?

Оцените первым — так другие читатели поймут, стоит ли читать

Частые вопросы

Что можно удалить в виртуальной машине Битрикса, чтобы освободить место?

Кеш компонентов и управляемый кеш, кеш уменьшенных картинок, старые файлы обмена с 1С, резервные копии продукта и старые журналы. Всё это пересоздаётся или не нужно для работы. Файлы базы, каталог /upload целиком и каталоги ядра трогать нельзя.

Удалил журналы, а свободного места не прибавилось.

Служба держит удалённый файл открытым, и место остаётся занятым до её перезапуска. Поэтому журнал обнуляют командой truncate -s 0, а не удаляют. Проверить такие файлы можно командой lsof +L1.

Сколько места должно оставаться свободным?

Ориентируйтесь на 20 процентов раздела и запас, которого хватит на полную резервную копию. База останавливается не в ноль, а заметно раньше: ей нужно место под временные файлы и журналы транзакций.

Можно ли удалять кеш на работающем сайте?

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