龙空技术网

docker资源限制「CPU」

寻优IT资料 270

前言:

此刻看官们对“服务主机本地服务网络受限占cpu”大体比较珍视,各位老铁们都需要分析一些“服务主机本地服务网络受限占cpu”的相关资讯。那么小编同时在网摘上汇集了一些对于“服务主机本地服务网络受限占cpu””的相关文章,希望咱们能喜欢,看官们快快来了解一下吧!

docker限制CPU使用量

默认情况下容器使用宿主机CPU是不受限制的。如果不对容器可是使用的CPU资源进行限制,一旦发生容器内程序异常使用CPU的情况,很可能把整个主机的CPU资源耗尽,从而导致更大的灾难。所以下面介绍介绍docker容器CPU的限制。

限制容器使用CPU的个数

docker1.13之后,通过--cpus就可以限制容器使用的主机CPU个数了。并且可以指定1.5之类的小数。

使用top命令查看宿主机CPU数量

查看宿主机CPU数量

通过下面命令创建一个最多可以使用一个CPU的容器

[root@question-test-1 ~]# docker run -it --rm --cpus=1 centos /bin/bash

[root@e649be2f2e7c /]# yum install -y epel-release

使用stress创建一个进程消耗CPU资源

[root@e649be2f2e7c /]# stress -c 2

stress: info: [78] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

使用docker stats命令查看docker容器消耗的cpu资源

查看容器CPU使用情况

容器负载为100%,也就是说一个CPU在100%工作。

使用top查看宿主机CPU消耗情况

启动容器之后查看宿主机CPU使用情况

可以看到宿主机上面并不是一个CPU为100%,另外一个为0%,而是负载都在50%左右,加起来正好是一个CPU 100%的负载。

Docker1.13之前的版本大家可是使用--cpu-period 和 --cpu-quota限制CPU的使用情况,但是使用起来就没有—cpus方便了,下面的命令可以实现相同的效果:

docker run -it --rm --cpu-period=50000 --cpu-quota=100000 centos /bin/bash

它们的单位是微妙,50000 表示 50 毫秒,100000 表示 100 毫秒。它们在这里的含义是:在每 50 毫秒的时间里,运行进程使用的 CPU 时间最多为 100 毫秒(需要两个 CPU 各执行 100 毫秒)

--cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配,而--cpu-quota是用来指定在这个周期内,最多可以有多少时间用来跑这个容器。跟--cpu-shares不同的是这种配置是指定一个绝对值,而且没有弹性在里面,容器对CPU资源的使用绝对不会超过配置的值。

感觉后面的方法好笨啊,大家还是尽可能使用第一种方法吧,简单易记

指定容器使用固定的CPU

通过上面的—cpus选项无法让容器始终运行在一个或者某几个CPU上面,但是通过—cpuset-cpus选项是可以的做到的。这个是很有意义的,因为现在的多核系统中每个核心都有自己的缓存,如果频繁的调度进程在不同的核心上执行势必带来缓存失效的开销。下面进行测试,指定容器始终运行在CPU编号为0的核上面。

[root@question-test-1 ~]# docker run -it --rm --cpuset-cpus="0" centos /bin/bash

启动压力测试命令

[root@f739472db1e2 /]# stress -c 2

stress: info: [73] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd

使用docker stats命令查看docker容器消耗的cpu资源

查看容器CPU使用情况

查看宿主机CPU使用情况

启动容器之后查看宿主机CPU使用情况

可以看到只有CPU0打得好了100%,其他的CPU并没有被容器使用。可以反复执行stress –c 2命令,验证确实只有CPU0在干活。

--cpuset-cpus选项还可以一次指定多个CPU

指定使用0、1两个CPU,当然我现在这样写诗没有什么意义的,因为我的主机只有两核,只是想说明这个参数是可以做到的。

[root@question-test-1 ~]# docker run -it --rm --cpuset-cpus="0,1" centos /bin/bash

[root@45554cbcb3a6 /]# stress -c 2

可以看到容器的CPU差不多200%

查看容器CPU使用情况

宿主机上面的两个CPU也都是全部在工作

启动容器之后查看宿主机CPU使用情况

不要高兴太早,--cpuset-cpus选项也不是万能的,也是有缺点的,这个选项必须自定CPU在操作系统中的编号,这对于动态调度的环境不是很方便,无法预测容器会在哪些主机运行,只能通过程序动态监测系统中的CPU编号,并生成docker run命令。

CPU权重限制

--cpu-shares徐安祥就是用来谁CPU权重的,他的默认值是1024,数字越小,权重越小,但是设置为0表示默认使用1024.

宕CPU资源足够时,设置CPU权重时没有意义的。放容器争用CPU资源的情况下,CPU的权重才能让不同的容器分到不同的CPU用量。

运行两个容器,都适用CPU0,分别设置—cpu-shares为512和1024

[root@question-test-1 ~]# docker run -it --rm --cpuset-cpus="0" --cpu-shares=512 --name lookyoo1 centos /bin/bash

[root@1c7886d3cbb1 /]#

[root@question-test-1 ~]# docker run -it --rm --cpuset-cpus="0" --cpu-shares=1024 --name lookyoo2 centos /bin/bash

[root@a250def4ac72 /]#

在两个容器都运行stress –c 2

使用docker stats命令查看docker容器消耗的cpu资源,可以看到两个容器是按照比例分配的

查看容器CPU使用情况

查看宿主机CPU使用情况,只有CPU0,负载你很高

启动容器之后查看宿主机CPU使用情况

两个容器分享一个CPU,所以总量是100%,具体每个容器分得的肥仔取决于—cpu-shares选项的设置,我们设置的是512和1024,则分得的比例为1:。.如果想让两个容器各占50%,只需要把--cpu-shares选项设置为相同的值就可以。

CPU的限制就给大家分享这么多吧,有不足之处还请各位指正!

另外小编还有很多视频资料,有需要的可以联系小编哦!

标签: #服务主机本地服务网络受限占cpu