architect/standards/3-process/process-resource-check.md

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