首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker Compose中设置CPU限制

在Docker Compose中设置CPU限制
EN

Stack Overflow用户
提问于 2020-01-09 13:27:45
回答 1查看 3.3K关注 0票数 0

我有一个本地服务器,我想部署许多微服务。我使用docker-compose文件来声明所有服务,并希望设置cpu限制。我参考下面的文档:https://docs.docker.com/compose/compose-file/我的docker组成文件如下:

代码语言:javascript
复制
version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 256M
        reservations:
          cpus: '0.25'
          memory: 64M
  service1:
    image: service1 image
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 64M

...

我对计算cpus的限制感到困惑。例如,cpu是8核。有20个微服务。有没有办法计算每个服务的cpu限制?或者有什么公式可以做到这一点?

- UPDATE -为了更清楚,这里我的主要观点是CPU限制。这是因为如果一个微服务的CPU使用了该微服务的80%的CPU,我想发送警报。如果我不设置cpu限制,那么微服务CPU使用率是否将与主机CPU使用率相同?我不使用Docker的Swarn,而只使用Docker。

任何想法都是非常受欢迎的。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2020-01-09 19:44:47

过度使用CPU并不是真正的问题。如果您有16个进程,并且它们都试图在8核系统上执行需要100% CPU的工作,则内核将跨进程分时执行;在实践中,您应该期望这些进程每个进程都获得50%的CPU,而任务只需要两倍的时间。我听到的一条建议(在Kubernetes空间中)是根据服务的稳态负载需求设置CPU请求,而不是设置CPU限制。

没有神奇的公式来设置这两个数字。最好的方法是设置一些度量系统,比如普罗米修斯,运行您的组合系统,并查看实际的资源利用率。在某些情况下,可以知道进程是单线程的,并且永远不会使用超过1个内核,或者您希望某个进程受到I/O限制,如果不是,则应该对其进行限制,但将这些设置基于实际使用情况可能更好。

(内存是不同的,因为您可能实际耗尽了物理内存,但进程能够持有比它们实际需要的内存多得多的内存。同样,度量工具在这里也会很有帮助。)

你的问题表明只有一位主持人。deploy:部分仅适用于Docker的Swarm集群管理器。如果你没有使用群组,那么你需要使用一个version: '2' docker-compose.yml文件,它有a different set of resource constraint declarations (并且大部分没有“预留”的概念)。例如,

代码语言:javascript
复制
version: '2'
services:
  redis:
    image: redis:alpine
    # cpus: 2.0
    mem_limit: 256m
    mem_reservation: 64m
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59657728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档