Место на сервере кончается тихо: сайт начинает отдавать ошибки, обмен с 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: если место вернулось, дальше можно не идти.
- Резервные копии продукта. Каталог
bitrix/backup/внутри сайта — первое, куда стоит заглянуть: один полный архив весит почти столько же, сколько сам сайт. На нашей машине там два месяца лежал архив на 906 МБ при размере сайта 3 ГБ. Копии нужны, но не на том же диске, что и сайт. - Кеш компонентов и управляемый кеш. Пересоздаются сами, удалять можно на работающем сайте:
Путь зависит от того, где лежит сайт: на машине с несколькими сайтами это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/<домен>/. - Кеш уменьшенных картинок —
upload/resize_cache/. Удаляется безопасно, но пересобирается при первых же посещениях и нагружает процессор, поэтому в час пик его лучше не трогать. - Файлы обмена с 1С —
upload/1c_catalog/и каталоги выгрузок. Там копятся файлы прошлых обменов, иногда по гигабайту и больше. - Журналы. Про них ниже отдельно: чаще всего самым большим каталогом на машине оказываются именно они.
Журналы веб-сервера: сначала проверьте ротацию
На машине, с которой писался этот разбор, каталог /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— или перезапускайте службу после удаления.
Когда освободили, а не помогло
Типичная картина: место освободили, а база всё равно не стартует или сайт отдаёт ошибку. Проверьте:
- Перезапущены ли службы. База, упавшая от нехватки места, сама не поднимется.
- Тот ли раздел вы чистили. Вывод
df -hпосле чистки должен показывать свободное место именно там, где его не было. - Не осталось ли удалённых, но открытых файлов. Пока процесс держит удалённый журнал, место не возвращается — помогает перезапуск службы.
- Не кончились ли иноды. Место есть, а файлы не создаются: смотрите
df -i. Обычно это миллионы мелких файлов кеша.
Чтобы не повторялось
- Перенесите резервные копии с сервера: копия рядом с сайтом не спасёт при отказе диска и занимает место.
- Ограничьте срок хранения двоичных журналов базы.
- Настройте ротацию журналов системы и веб-сервера.
- Поставьте оповещение о свободном месте: предупреждение за неделю до аварии стоит дешевле самой аварии.
Если чистить уже нечего, диск пора расширять — порядок в отдельной инструкции. А если место съедает база, смотрите разбор про размер базы Битрикс24.
Статья была полезна?
Частые вопросы
Что можно удалить в виртуальной машине Битрикса, чтобы освободить место?
Кеш компонентов и управляемый кеш, кеш уменьшенных картинок, старые файлы обмена с 1С, резервные копии продукта и старые журналы. Всё это пересоздаётся или не нужно для работы. Файлы базы, каталог /upload целиком и каталоги ядра трогать нельзя.
Удалил журналы, а свободного места не прибавилось.
Служба держит удалённый файл открытым, и место остаётся занятым до её перезапуска. Поэтому журнал обнуляют командой truncate -s 0, а не удаляют. Проверить такие файлы можно командой lsof +L1.
Сколько места должно оставаться свободным?
Ориентируйтесь на 20 процентов раздела и запас, которого хватит на полную резервную копию. База останавливается не в ноль, а заметно раньше: ей нужно место под временные файлы и журналы транзакций.
Можно ли удалять кеш на работающем сайте?
Да, кеш компонентов и управляемый кеш пересоздаются автоматически. Первые минуты сайт будет отвечать медленнее, поэтому чистку кеша картинок лучше делать не в часы нагрузки.