代码之家  ›  专栏  ›  技术社区  ›  Greg0ry

Docker swarm带来了太多的进程

  •  1
  • Greg0ry  · 技术社区  · 6 年前

    docker swarm 注意到 docker service ls 显示的流程明显少于系统工具(如top)

    这是我跑步时得到的 码头服务

    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
    

    我猜(当然是根据我的配置) 码头服务 应显示与普通系统工具相同数量的进程。。。

    --编辑(1)--

    我还可以确认,当缩放到零时,我没有得到任何进程:

    docker service scale stack_celery=0
    

    当我这么做的时候 附言

    --编辑(2)--

    -c 1 解决了“问题”。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Siyu Zeeshan Akhter    6 年前

    这里有几个概念:

    docker service ls ,定义在docker-compose.yml中的关键字services下,如“芹菜”,它是docker实例的逻辑组。

    ps ps ax | grep celery ,你应该看到几乎相同的东西。)

    芹菜通过创造工人来工作。默认数字是CPU核心数。所以 celery worker 你得到4个工人的过程。

        2
  •  1
  •   BMitch    6 年前

    在容器中运行的服务、容器和进程是三种不同的东西。

    服务用于部署一个或多个具有相同配置的容器并维护目标状态。这个 service ls 显示容器中要运行的复制副本数量,而不是每个容器中运行的进程数量。

    容器是运行应用程序的隔离环境。该环境为文件系统、网络和进程id等对象获取名称空间。注意:主机可以在所有名称空间中看到进程,但在容器名称空间中,只能看到属于同一名称空间的进程。

    容器内的应用程序可能会产生多个进程。当容器内部的pid 1退出时,容器将停止,因此不要在后台启动服务器并退出启动它的shell。芹菜,它运行多个工人。一个容器只有一个副本,但该容器内部将有多个PID。

    另见: http://docs.celeryproject.org/en/latest/userguide/workers.html