type: standard
aspect: process
title: "Проверка ресурсов перед развёртыванием"
version: 1.0.0
date: 2026-02-19
status: active
Проверка ресурсов перед развёртыванием
Версия: 1.0.0
Дата: 2025-12-18
Принцип
Перед любым действием, требующим значительных ресурсов, агент ОБЯЗАН проверить доступность ресурсов и при необходимости выполнить очистку.
Когда проверять
| Действие |
Требует проверки |
| Запуск Docker контейнера |
✅ Да |
| Развёртывание сайта |
✅ Да |
| Установка venv/node_modules |
✅ Да |
| Импорт большого файла (>100MB) |
✅ Да |
| Бэкап БД |
✅ Да |
npm install / pip install |
✅ Да |
| Запуск скрипта |
❌ Нет |
| Редактирование файла |
❌ Нет |
| Чтение файлов |
❌ Нет |
Что проверять
| Ресурс |
Команда |
Критичный |
Блокирующий |
| RAM Available |
free -h |
<500 MB |
<200 MB |
| Swap Used |
free -h |
>50% |
>80% |
| Диск Used |
df -h / |
>80% |
>90% |
| Диск Free |
df -h / |
<5 GB |
<2 GB |
Уровни состояния
ЗЕЛЁНЫЙ — можно развёртывать
RAM Available > 500 MB
Swap Used < 50%
Диск Used < 80%
Диск Free > 5 GB
ЖЁЛТЫЙ — с осторожностью
RAM 200-500 MB
ИЛИ Swap 50-80%
ИЛИ Диск 80-90%
ИЛИ Диск Free 2-5 GB
→ Выполнить L0 очистку
→ Предложить L1 очистку
→ Продолжить если улучшилось
КРАСНЫЙ — стоп
RAM < 200 MB
ИЛИ Swap > 80%
ИЛИ Диск > 90%
ИЛИ Диск Free < 2 GB
→ Выполнить L0 очистку
→ Выполнить L1 очистку (с подтверждением)
→ Отказать если не помогло
Уровни очистки
L0 — Автоматическая (без вопросов)
| Что |
Команда |
Ожидаемо |
| apt кэш |
apt-get clean |
100-500 MB |
| pip кэш |
pip cache purge |
50-200 MB |
| журналы >3 дней |
journalctl --vacuum-time=3d |
100-500 MB |
| /tmp мусор |
rm -rf /tmp/*.log /tmp/*.tmp /tmp/pip-* |
10-100 MB |
| Docker мусор |
docker system prune -f |
500 MB-5 GB |
| pycache |
find . -name "__pycache__" -exec rm -rf {} + |
10-50 MB |
L1 — С подтверждением пользователя
| Что |
Команда |
Риск |
| /tmp полностью |
rm -rf /tmp/* |
Потеря temp файлов |
| snap ненужные |
snap remove {name} |
Нужна переустановка |
| node_modules старые |
find . -name "node_modules" -mtime +30 -exec rm -rf {} + |
npm install |
| venv старые |
find . -name "venv" -mtime +30 -exec rm -rf {} + |
pip install |
| Docker volumes unused |
docker volume prune |
Потеря данных! |
L2 — Только вручную
| Что |
Почему |
| Логи приложений |
Могут понадобиться для отладки |
| Docker volumes active |
Данные БД |
| Файлы проектов |
Потеря работы |
| Бэкапы |
Невосстановимо |
Скрипт проверки
#!/bin/bash
# /opt/scripts/check_resources.sh
set -e
# Получаем метрики
RAM_AVAIL=$(free -m | awk '/Mem:/ {print $7}')
SWAP_TOTAL=$(free -m | awk '/Swap:/ {print $2}')
SWAP_USED=$(free -m | awk '/Swap:/ {print $3}')
SWAP_PCT=$([ $SWAP_TOTAL -gt 0 ] && echo "$((SWAP_USED * 100 / SWAP_TOTAL))" || echo "0")
DISK_PCT=$(df / | awk 'NR==2 {gsub("%",""); print $5}')
DISK_FREE_GB=$(df -BG / | awk 'NR==2 {gsub("G",""); print $4}')
echo "RAM Available: ${RAM_AVAIL} MB"
echo "Swap Used: ${SWAP_PCT}%"
echo "Disk Used: ${DISK_PCT}%"
echo "Disk Free: ${DISK_FREE_GB} GB"
# Определяем статус
if [ $RAM_AVAIL -lt 200 ] || [ $SWAP_PCT -gt 80 ] || [ $DISK_PCT -gt 90 ] || [ $DISK_FREE_GB -lt 2 ]; then
echo "STATUS: RED"
exit 1
elif [ $RAM_AVAIL -lt 500 ] || [ $SWAP_PCT -gt 50 ] || [ $DISK_PCT -gt 80 ] || [ $DISK_FREE_GB -lt 5 ]; then
echo "STATUS: YELLOW"
exit 2
else
echo "STATUS: GREEN"
exit 0
fi
Скрипт очистки L0
#!/bin/bash
# /opt/scripts/cleanup_l0.sh
echo "=== L0 Cleanup ==="
echo "Cleaning apt cache..."
apt-get clean 2>/dev/null
echo "Cleaning pip cache..."
pip cache purge 2>/dev/null
echo "Cleaning journals..."
journalctl --vacuum-time=3d 2>/dev/null
echo "Cleaning /tmp..."
rm -rf /tmp/*.log /tmp/*.tmp /tmp/pip-* 2>/dev/null
echo "Cleaning Docker..."
docker system prune -f 2>/dev/null
echo "Cleaning __pycache__..."
find $WORKSPACE -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null
echo "=== Done ==="
df -h /
Алгоритм для агента
1. ПЕРЕД развёртыванием:
→ Выполнить check_resources.sh
2. ЕСЛИ GREEN:
→ Продолжить развёртывание
3. ЕСЛИ YELLOW:
→ Выполнить cleanup_l0.sh
→ Повторить проверку
→ Если GREEN — продолжить
→ Если всё ещё YELLOW — предложить L1 очистку
4. ЕСЛИ RED:
→ Выполнить cleanup_l0.sh
→ Повторить проверку
→ Если улучшилось — продолжить
→ Если RED — выполнить L1 с подтверждением
→ Если всё ещё RED — отказать с отчётом
Типичные "пожиратели" места
| Компонент |
Где искать |
Типичный размер |
| Docker images |
docker images |
500 MB - 10 GB |
| Docker volumes |
docker volume ls |
100 MB - 50 GB |
| Snap пакеты |
snap list |
100 MB - 2 GB каждый |
| node_modules |
find . -name "node_modules" |
200-500 MB каждый |
| venv |
find . -name "venv" |
100-500 MB каждый |
| /tmp |
du -sh /tmp/* |
0 - 10 GB |
| Логи |
/var/log/ |
100 MB - 5 GB |
Snap пакеты — что можно удалить на сервере
| Snap |
Нужен на сервере? |
| chromium |
❌ Нет |
| firefox |
❌ Нет |
| cups |
❌ Нет (принтеры) |
| gnome-* |
❌ Нет (GUI) |
| gtk-* |
❌ Нет (GUI) |
| mesa-* |
❌ Нет (графика) |
| core22/core24 |
✅ Да (base) |
| snapd |
✅ Да (менеджер) |
Версия: 1.0.0