【问题标题】:Memory resources for a docker container running from docker-compose从 docker-compose 运行的 docker 容器的内存资源
【发布时间】:2020-03-23 00:20:26
【问题描述】:

我在 Docker compose 上运行 Sonarqube,我的文件如下所示:

version: "3"


services:
  sonarqube:
    image: sonarqube
    ports:
     - "9000:9000"
     - "5432:5432"
    links:
      - db:db
    environment:
     - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
     - SONARQUBE_JDBC_USERNAME=postgres
     - SONARQUBE_JDBC_PASSWORD=sonar
    volumes:
     - ..../Work/tools/_SonarQube_home/conf:/opt/sonarqube/conf
#     - sonarqube_data:/opt/sonarqube_new/data
     - ...../Work/tools/_SonarQube_home/data:/opt/sonarqube/data
     - ....../Work/tools/_SonarQube_home/extensions:/opt/sonarqube/extensions
     - ..../Work/tools/_SonarQube_home/bundled-plugins:/opt/sonarqube/lib/bundled-plugins

  db:
    image: postgres
    environment:
     - POSTGRES_USER=postgres
     - POSTGRES_PASSWORD=sonar
     - POSTGRES_DB=sonar
    volumes:
     - .../Work/tools/_PostgreSQL_data:/var/lib/postgresql
     # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
     - ..../Work/tools/_PostgreSQL_data/data:/var/lib/postgresql/data

一切正常,这很棒。有一刻我看到 Sonarqube 实例开始缓慢行动,因此我检查了docker stats。它看起来像这样:

| CPU   | Mem Usage/ Limit   |
|-------| --------------------
| 5.39% | 1.6GiB / 1.952GiB  |

如何为服务器定义更多 RAM 资源,比如 4 GB?以前它是mem_limit,但现在在版本 3 上它不存在。 有什么好的解决方案?

谢谢!

【问题讨论】:

    标签: docker memory-management docker-compose sonarqube resources


    【解决方案1】:

    在 Compose 文件版本 3 中,资源将 moved 限制在 deploy: {resources: ...} 键下,但也仅记录在 Swarm 模式下工作。因此,要实际设置它们,您需要切换到最兼容的版本 2 Compose 文件。

    version: '2'
    services:
      sonarqube:
        mem_limit: 4g
    

    The default 应该让容器能够使用无限量的内存。如果您在 Docker 位于 Linux VM(任何基于 Docker Toolbox 或 Docker Machine,Docker for Mac)的环境中运行,则会受到 VM 内存大小的限制。

    【讨论】:

    • 谢谢!似乎是这样。
    【解决方案2】:

    如果您要部署到 Swarm,那么您可以在 Compose 文件中使用 resources 关键字。 (在文件参考https://docs.docker.com/compose/compose-file/ 的资源下有描述)

    所以你可以像 Swarm 一样做这样的事情:

    version: "3.7"
    services:
      redis:
        image: redis:alpine
        deploy:
          resources:
            limits:
              cpus: '0.50'
              memory: 50M
            reservations:
              cpus: '0.25'
              memory: 20M
    

    如果您使用的是 Compose,则可以选择返回到 Compose 文件版本 2.0,如 Docker 的 Compose 文件参考中所述。

    寻找在非集群模式容器上设置资源的选项?

    此处描述的选项特定于部署密钥和群模式。如果你想在非 swarm 上设置资源限制 部署,使用 Compose 文件格式版本 2 CPU、内存和其他 资源选项。如果您还有其他问题,请参阅 关于 GitHub 问题 docker/compose/4513 的讨论。

    我不熟悉 Sonarqube 内存问题,但您可能想看看这个https://docs.sonarqube.org/display/SONARqube71/Java+Process+Memory

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多