Проект: {PROJECT_NAME}
Последнее обновление: {ДАТА}
# 1. Статус приложения
systemctl status {PROJECT_NAME}
# 2. Последние логи
journalctl -u {PROJECT_NAME} -n 50 --no-pager
# 3. Проверка ресурсов
top -bn1 | head -20
# 4. Проверка диска
df -h
# 5. Проверка БД
curl http://localhost:{PORT}/health
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Не запускается | Ошибка конфигурации | Проверить .env, логи |
| 502 Bad Gateway | Приложение упало | systemctl restart |
| Медленно работает | Много запросов | Проверить CPU/память |
| Ошибки БД | Нет подключения | Проверить PostgreSQL |
| Диск заполнен | Логи/бэкапы | Очистить место |
$ systemctl status {PROJECT_NAME}
● {PROJECT_NAME}.service - {Description}
Loaded: loaded
Active: failed (Result: exit-code)
# 1. Подробные логи
journalctl -u {PROJECT_NAME} -xe
# 2. Проверить конфигурацию
cat /etc/{PROJECT_NAME}/.env
# 3. Проверить права доступа
ls -la /opt/{PROJECT_NAME}/
# 4. Попробовать запустить вручную
cd /opt/{PROJECT_NAME}
source venv/bin/activate
{КОМАНДА_ЗАПУСКА} # Например: streamlit run app.py
Причина: Не установлены зависимости
Решение:
cd /opt/{PROJECT_NAME}
source venv/bin/activate
pip install -r requirements.txt
systemctl restart {PROJECT_NAME}
Причина: Неправильные права доступа
Решение:
# Исправить владельца
chown -R {USER}:{GROUP} /opt/{PROJECT_NAME}
# Исправить права
chmod 755 /opt/{PROJECT_NAME}
chmod 644 /opt/{PROJECT_NAME}/*.py
# Перезапустить
systemctl restart {PROJECT_NAME}
Причина: Порт занят
Решение:
# Найти процесс на порту
lsof -i :{PORT}
# Убить процесс
kill -9 {PID}
# Или изменить порт в конфиге
# Перезапустить
systemctl restart {PROJECT_NAME}
Причина: БД не запущена или неверные credentials
Решение:
# Проверить PostgreSQL
systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"
# Проверить подключение
sudo -u postgres psql -U {DB_USER} -d {DB_NAME}
# Проверить DATABASE_URL в .env
cat /etc/{PROJECT_NAME}/.env | grep DATABASE_URL
# Если пароль неверный - см. SECRETS.md
# 1. Проверить CPU
top -bn1 | grep %Cpu
# Если > 80% - проблема с CPU
# 2. Проверить память
free -h
# Если Swap используется - нехватка RAM
# 3. Проверить load average
uptime
# Если > количество CPU cores - перегрузка
# 4. Проверить медленные запросы БД
sudo -u postgres psql {DB_NAME} -c "SELECT query, calls, total_time, mean_time FROM pg_stat_statements ORDER BY mean_time DESC LIMIT 10;"
# 5. Профилирование приложения
# Добавить в код профайлер
Причина: Много запросов или тяжёлые вычисления
Решение:
# 1. Временно: увеличить timeout
# В конфиге Nginx/Gunicorn
# 2. Добавить кеширование (Redis)
# См. CODE-GUIDE.md
# 3. Оптимизировать код
# Профилирование, убрать циклы
# 4. Horizontal scaling
# Запустить несколько инстансов за load balancer
Причина: Нет индексов или неоптимальные запросы
Решение:
# 1. Найти медленные запросы
sudo -u postgres psql {DB_NAME} -c "SELECT query, calls, mean_time FROM pg_stat_statements WHERE mean_time > 1000 ORDER BY mean_time DESC LIMIT 5;"
# 2. Добавить индексы
# CREATE INDEX idx_orders_status ON orders(status);
# 3. EXPLAIN ANALYZE запрос
sudo -u postgres psql {DB_NAME} -c "EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'new';"
# 4. VACUUM ANALYZE
sudo -u postgres psql {DB_NAME} -c "VACUUM ANALYZE;"
Решение:
# 1. Проверить что жрёт память
ps aux --sort=-%mem | head -10
# 2. Перезапустить приложение (освободить память)
systemctl restart {PROJECT_NAME}
# 3. Увеличить RAM сервера (если постоянная проблема)
# 4. Оптимизировать код (memory leaks)
Симптомы:
psycopg2.OperationalError: could not connect to server
Диагностика:
# Проверить статус PostgreSQL
systemctl status postgresql
# Проверить подключение
sudo -u postgres psql
Решение:
# Запустить PostgreSQL
systemctl start postgresql
# Если не стартует - проверить логи
journalctl -u postgresql -n 50
Симптомы:
FATAL: could not create shared memory segment: No space left on device
Диагностика:
# Проверить размер БД
sudo -u postgres psql -c "SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;"
Решение:
# 1. Очистить старые данные (см. MAINTENANCE.md)
# 2. VACUUM FULL
sudo -u postgres psql {DB_NAME} -c "VACUUM FULL;"
# 3. Увеличить диск (если нужно)
Симптомы:
alembic.util.exc.CommandError: Can't locate revision
Диагностика:
# Проверить текущую версию
alembic current
# История миграций
alembic history
Решение:
# Откатить на последнюю работающую
alembic downgrade -1
# Применить снова
alembic upgrade head
# Если не помогает - stamp версию вручную
alembic stamp head
Причина: Backend не запущен
Решение:
systemctl restart {PROJECT_NAME}
systemctl status {PROJECT_NAME}
Причина: Backend тормозит, не успевает за timeout
Решение:
# Увеличить timeout в Nginx
# /etc/nginx/sites-available/{DOMAIN}
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
nginx -t
systemctl reload nginx
Причина: Неверный API ключ или токен
Решение:
# Проверить ключ
cat /etc/{PROJECT_NAME}/.env | grep API_KEY
# Проверить срок действия токена (JWT)
# Если истёк - обновить
Симптомы:
- Память постоянно растёт
- Через N часов приложение падает с OOM
Диагностика:
# Мониторить память каждые 10 сек
watch -n 10 free -h
# Профилирование (Python)
pip install memory_profiler
python -m memory_profiler app.py
Решение:
# 1. Временно: перезапускать приложение раз в N часов (cron)
0 */6 * * * systemctl restart {PROJECT_NAME}
# 2. Найти и исправить leak в коде
# Использовать профайлер
# 3. Ограничить память для процесса (systemd)
# /etc/systemd/system/{PROJECT_NAME}.service
MemoryMax=2G
Симптомы:
Killed
Диагностика:
# Проверить OOM в логах
dmesg | grep -i "out of memory"
# Проверить что убито
journalctl -k | grep -i kill
Решение:
# 1. Увеличить RAM сервера
# 2. Добавить swap
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 3. Оптимизировать код
Симптомы:
No space left on device
Диагностика:
# Общее использование
df -h
# Что занимает место
du -sh /* | sort -h
du -sh /var/* | sort -h
Решение:
# 1. Очистить логи
find /var/log/ -name "*.log.*" -mtime +30 -delete
# 2. Очистить старые бэкапы
find /backup/ -name "*.sql" -mtime +30 -delete
# 3. Очистить /tmp
rm -rf /tmp/*
# 4. Docker (если используется)
docker system prune -a
# 5. Очистить package cache
apt clean
# 6. VACUUM FULL БД
sudo -u postgres psql {DB_NAME} -c "VACUUM FULL;"
Симптомы:
No space left on device (но df показывает есть место)
Диагностика:
# Проверить inodes
df -i
# Найти где много файлов
find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
Решение:
# Найти и удалить много маленьких файлов
find /tmp -type f -delete
find /var/log -name "*.log.*" -delete
Решение:
source venv/bin/activate
pip install {MODULE}
Решение:
certbot renew
systemctl reload nginx
Причина: Сервис не запущен
Решение:
systemctl start {SERVICE}
Решение:
# Увеличить лимит
ulimit -n 65536
# Permanent (в /etc/security/limits.conf)
* soft nofile 65536
* hard nofile 65536
Если после 30 минут troubleshooting проблема не решена:
bash
journalctl -u {PROJECT_NAME} -n 500 > /tmp/logs.txtПоследнее обновление: {ДАТА}
Контакт для экстренных случаев: {ТЕЛЕФОН/EMAIL}