我有一个本地服务器,我想部署许多微服务。我使用docker-compose文件来声明所有服务,并希望设置cpu限制。我参考下面的文档:https://docs.docker.com/compose/compose-file/我的docker组成文件如下:
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。
任何想法都是非常受欢迎的。
谢谢,
发布于 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 (并且大部分没有“预留”的概念)。例如,
version: '2'
services:
redis:
image: redis:alpine
# cpus: 2.0
mem_limit: 256m
mem_reservation: 64mhttps://stackoverflow.com/questions/59657728
复制相似问题