默认情况下,所有容器可以平等的使用host上的CPU资源并没有限制
1.docker可以通过-c或者--cpu-shares设置容器使用的权重。如果不指定,默认值为1024。
与内存的限额不同,通过-c设置的cpu share并不是CPU资源的绝对数量,而是一个相对的权重值。某个容器最终能分到的CPU资源取决于它的cpu share占所有容器cpu share总和的比例。
直白点说:通过cpu share可以设置容器使用CPU的优先级。
例如:我们运行两个容器,一个限制CPU的权重为1024,一个设置为512,cpu_1的cpu的大小是cpu_2的cpu的大小的2倍
当两个容器都需要cpu资源的时候,cpu_1获得的cpu资源是cpu_2获得的cpu资源的2倍。
注:这种按权重分配CPU只会发生在CPU资源紧张的情况下。如果cpu_1处于空闲状态,而cpu_2需要资源,那么cpu_2也可以获得全部的CPU 的资源
2.通过progrium/stress镜像做cpu的压测
.运行两个容器:docker2和docker3,分别分配他们的cpu权重为512和1024
--cpu设置的是工作线程的数量。如果当前Host只有一个cpu,那么1个工作线程就可以将CPU压满。如果Host有多颗CPU,则需要指定--cpu的数量
在host执行top命令,查看cpu使用情况(在这里,为什么我只有两个运行的容器,但是当我top的时候有那么多strees的进程?因为你有8颗cpu啊,2个容器就是16个进程啊~~~)
注:这个试验我没做出来,因为我用的Host是8颗CPU的。。。。。。但是我比较坚信,容器cpu权重的分配机制
如:
我运行了一个权重为1024的容器,进入容器查看容器的cpu颗数的时候,显示的是8颗,我Host的cpu个数就是8,也可以说明,容器的CPU是按照权重分配的而不是实际颗数。