Перейти к содержанию

Ограничение использования CPU и памяти

В рекомендуемой конфигурации на основе Docker Gramps Web использует Gunicorn для обслуживания бэкенда и Celery для фоновых задач. В обоих случаях несколько рабочих процессов могут выполняться параллельно, что делает приложение более отзывчивым с точки зрения пользователя. Однако увеличение числа рабочих процессов также увеличивает объем используемой оперативной памяти (даже когда приложение не активно) и разрешение обработки запросов параллельно может привести к высокому использованию CPU (в частности, когда многие пользователи используют приложение одновременно). И Gunicorn, и Celery позволяют ограничить количество параллельных рабочих процессов.

Получение информации о вашей системе

На Linux вы можете проверить количество доступных ядер на вашей системе с помощью следующей команды:

lscpu | grep CPU

Чтобы увидеть, сколько памяти и пространства подкачки у вас доступно, используйте

free -h

Ограничение количества рабочих процессов Gunicorn

Самый простой способ установить количество рабочих процессов Gunicorn при использовании стандартного образа Gramps Web в Docker — установить переменную окружения GUNICORN_NUM_WORKERS, например, объявив ее в файле docker-compose.yml, в разделе "environment".

services:
  grampsweb:
    environment:
      GUNICORN_NUM_WORKERS: 2

Смотрите документацию Gunicorn, чтобы определить идеальное количество рабочих процессов.

Ограничение количества рабочих процессов Celery

Чтобы установить количество рабочих процессов Celery, измените настройку concurrency в файле Docker compose:

  grampsweb_celery:
    command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2

Смотрите документацию Celery, чтобы определить идеальное количество рабочих процессов.

Info

Если флаг concurrency опущен (что имело место в документации Gramps Web до версии 2.5.0), он по умолчанию равен количеству доступных ядер CPU на системе, что может потреблять значительное количество памяти.