Перейти до змісту

Оптимізація та діагностика

Ця сторінка призначена для швидких перевірок типових експлуатаційних проблем.

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 vCPU
  • 1 GB RAM
  • 20 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 GB RAM.
  • 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