Оптимізація та діагностика
Ця сторінка призначена для швидких перевірок типових експлуатаційних проблем.
1. Перевірка логів сервісів backend і MariaDB
У директорії деплою (де розміщено docker-compose.yml) може бути виконана така команда:
docker compose ps
Має бути перевірено, що контейнери backend і mariadb запущені.
docker compose logs --tail=200 backend
docker compose logs --tail=200 mariadb
Корисні патерни, які можуть бути перевірені:
- Backend: помилки підключення до БД, збої міграцій, помилки під час старту.
- MariaDB: помилки
access denied, збої ініціалізації, пошкоджені таблиці, попередження про нестачу місця на диску.
2. Системні вимоги
На основі практичного досвіду деплою, 1 vCPU, 512 MB RAM і 10 GB диска є недостатніми для стабільної роботи на Ubuntu.
За такої конфігурації MariaDB працювала нестабільно, а пам'ять і диск повністю утилізувалися.
Рекомендовані мінімальні вимоги:
1 vCPU1 GB RAM20 GBдиска- Налаштований swap
Якщо RAM не може бути збільшена понад 2 GB, має бути налаштований swap:
How To Add Swap Space on Ubuntu 22.04
3. Тюнінг MariaDB
MariaDB є найбільш memory-intensive сервісом у цьому стеку. У цьому розділі описано практичний тюнінг для серверів з обмеженими ресурсами.
3.1 Тюнінг сервісу MariaDB
Для налаштування використання пам'яті MariaDB може бути використаний власний my.cnf.
touch mariadb_config.cnf
У mariadb_config.cnf має бути використано таку конфігурацію:
[mysqld]
innodb_buffer_pool_size = 256M
max_connections = 20
thread_cache_size = 8
tmp_table_size = 16M
max_heap_table_size = 16M
sort_buffer_size = 512K
read_buffer_size = 256K
performance_schema = OFF
Пояснення:
innodb_buffer_pool_sizeє основним споживачем пам'яті;256Mє збалансованим значенням для сервера з1 GBRAM.performance_schemaє корисним для налагодження, але додає накладні витрати (часто близько50-100 MB).max_connectionsобмежується, оскільки кожне з'єднання використовує буфери пам'яті;20зазвичай достатньо для цієї конфігурації.- Решта параметрів керують тимчасовими таблицями в пам'яті та буферами сесій.
3.2 Обмеження пам'яті для сервісу MariaDB у docker compose
Обмеження пам'яті також можуть бути застосовані в Docker Compose. Це гарантує, що вся пам'ять хоста не буде спожита контейнером mariadb, а стабільність застосунку буде збережена.
docker-compose.yml після тюнінгу MariaDB:
services:
mariadb:
image: mariadb:11.4
restart: always
command: ['--wait_timeout=86400', '--interactive_timeout=86400']
env_file:
- bangi-db.env
volumes:
- .mariadb:/var/lib/mysql
- ./mariadb_config.cnf:/etc/mysql/conf.d/my.cnf
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
landing-renderer:
image: php:8.2-apache
volumes:
- ./landings:/var/www/html/landings
backend:
image: ghcr.io/devalentino/bangi-backend:dev-f47bb3d
restart: always
env_file:
- bangi-backend-config.env
- bangi-db.env
ports:
- '8000:5000'
volumes:
- ./landings:/app/landings
- ./IP2LOCATION-LITE-DB1.IPV6.BIN:/app/IP2LOCATION-LITE-DB1.IPV6.BIN
healthcheck:
test: [ "CMD", "curl", "-f", "http://0.0.0.0:5000/api/v2/health" ]
interval: 120s
timeout: 10s
retries: 3
start_period: 120s
depends_on:
mariadb:
condition: service_healthy
ui:
image: ghcr.io/devalentino/bangi-ui:dev-4a70be3
restart: always
ports:
- '8001:80'
volumes:
- ./bangi-ui-config.js:/usr/share/nginx/html/app-config.js
Пояснення:
./mariadb_config.cnf:/etc/mysql/conf.d/my.cnfмонтує тюнінгований конфіг MariaDB у контейнер.deploy.resourcesвизначає memory limit і reservation для сервісуmariadb.- Якщо використовується звичайний Docker Compose (не Swarm), має бути перевірено, що ваша версія Compose застосовує ці обмеження у вашому середовищі.
3.3 Застосування змін
Для застосування змін конфігурації може бути виконана наступна команда:
docker compose down && docker compose up -d