Докер рой поднимает слишком много процессов - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю с сельдереем с docker swarm и заметил, что docker service ls показывает значительно меньше процессов, чем системные инструменты (например, top)

Это то, что я получаю, когда запускаю docker service ls

docker service ls
ID                  NAME                             MODE                REPLICAS            IMAGE                                                            PORTS
(...)
mdisx2effvfp        stack_celery                     replicated          1/1                 some:url
(...)

Это то, что я получаю, когда запускаю ps

ps ax | grep celery
 7606 ?        Ss     0:49 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7733 ?        S     11:53 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7734 ?        Sl     6:02 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
 7735 ?        S      5:52 /usr/local/bin/python /usr/local/bin/celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name

Это то, что у меня есть в моем docker-compose.yaml

cat docker-compose.yaml
(...)
celery:
  image: some:url
  command: celery -A my_package_name worker --loglevel=WARNING -Q my_queue_name
  depends_on:
    - queue # this is my other container with rabbitmq
  deploy:
    restart_policy:
      condition: any
    replicas: 1
    resources:
      limits:
        memory: 1G
  configs:
    - source: celeryconfig.py
      target: /my_package_name/celeryconfig.py
  networks:
    - backend

Я что-то упустил?

Я бы предположил (исходя из моих конфигов, конечно) docker service ls должен показывать то же количество процессов, что и обычные системные инструменты ...

Пожалуйста, помогите мне понять.

- edit (1) -

Я также могу подтвердить, что при масштабировании до нуля я вообще не получаю никаких процессов:

docker service scale stack_celery=0

Когда я это сделаю, то ps будетне показать сельдерея.Как только я уменьшу масштаб до 1, в ps я вижу, что есть (опять же) 4 процесса.

- edit (2) -

ОК, я бы не подумалсельдерей будет автоматически порождать процессы, чтобы приспособиться к числу процессоров.-c 1 исправляет "проблему".

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Несколько понятий здесь:

service: дано docker service ls, определенным в вашем docker-compose.yml под ключевыми словами services, например, "celery", это логическая группа экземпляров docker. *Процесс 1004 *

: в Docker для linux вы можете видеть процесс, работающий в вашем контейнере непосредственно на вашем хосте с ps.(Если вы врезаетесь в свой контейнер и запускаете ps ax | grep celery, вы должны увидеть почти то же самое.)

Сельдерей работает, создавая рабочих.По умолчанию используется количество ядер ЦП.Так что с celery worker вы получаете 4 рабочих процесса.

0 голосов
/ 28 декабря 2018

Службы, контейнеры и процессы, выполняющиеся внутри контейнера, - это три разные вещи.

Служба используется для развертывания одного или нескольких контейнеров с одинаковой конфигурацией и поддержания целевого состояния.service ls показывает, сколько реплик должно выполняться контейнером, а не сколько процессов выполняется внутри каждого контейнера.

Контейнер - это изолированная среда для запуска приложения.Эта среда получает пространство имен для таких вещей, как файловая система, сеть и идентификаторы процессов.Обратите внимание, что хост может видеть процессы во всех пространствах имен, но внутри пространства имен контейнера вы можете видеть только процессы, принадлежащие одному и тому же пространству имен.

Ваше приложение внутри контейнера может порождать несколько процессов.Когда pid 1 внутри контейнера выходит, контейнер будет остановлен, поэтому не запускайте сервер в фоновом режиме и не выходите из оболочки, которая его запустила.С сельдереем работает несколько рабочих.Есть только одна копия контейнера, но внутри этого контейнера будет несколько пидов.

См. Также: http://docs.celeryproject.org/en/latest/userguide/workers.html

...