docker Cgroup资源控制

目录

1. Cgroup

2. Cgroup四种特性

3.控制CPU使用率

3.1 通过文件控制cpu使用率

3.2 通过命令修改

3.3 设置多个容器资源比

3.5 绑核

4.控制内存使用率


1. Cgroup

cgroup,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,
还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups/ (Control groups)实现了对资源的配额和度量。

2. Cgroup四种特性

  • 资源限制:可以对任务使用的资源总额进行限制

  • 优先级分配:通过分配的cpu时间片数量以及磁盘Io带宽大小,实际上相当于控制了任务运行优先级

  • 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

  • 任务控制: cgroup可以对任务执行挂起、恢复等操作

3.控制CPU使用率

控制CPU几个命令

  • --cpu-period    设置调度周期时间  1000~1000000
  • --cpu-quota     设置容器进程的CPU占用时间,要与调度周期时间成正比
  • --cpu-shares   设置多个容器之间的cpu资源占用比
  • --cpuset-cpus  绑核(cpu编号从0开始)

3.1 通过文件控制cpu使用率

首先启动一个容器,镜像为centos7,命名为test1 

启动成功之后进入/sys/fs/cgroup/cpu/docker/

该目录中存放各个容器的cpu管理文件,找到容器对应的id号,进入

进入之后修改period和quota文件

默认情况下文件内容为 100000和-1      -1代表不做任何限制

我们通过编写一个死循环脚本来查看默认情况下的cpu使用情况

docker Cgroup资源控制_第1张图片

 运行脚本,并查看此时cpu的使用率

重新打开一个终端

docker Cgroup资源控制_第2张图片

 此时修改quota文件,以period文件值作为指示值,以比例的形式修改quota文件值

这里修改为50000,相较于period文件的100000为50%

 修改完之后,再次进入镜像执行脚本

docker Cgroup资源控制_第3张图片 3.2 通过命令修改

 重新创建一个容器名为test2  ,在创建的时候指定该容器的cpu使用率在50%

同样,编写脚本测试

docker Cgroup资源控制_第4张图片

可以看到此时cpu的使用率在50%左右,我还可以通过docker stats命令来查看容器的使用情况 

 命令显示此时的test2容器,他的使用率在50%左右

3.3 设置多个容器资源比

使用--cpu-shares命令可以控制多个容器之间的cpu资源比

重新开两个终端并分开新建容器

docker Cgroup资源控制_第5张图片

docker Cgroup资源控制_第6张图片

每个Docker容器的CPU份额都是1024,单独一个容器的份额是没有意义的,只有在同时运行多个容器时,容器CPU的加权效果才能体现出来

3.5 绑核

在运行容器的时候,为容器指定cpu

docker Cgroup资源控制_第7张图片

4.控制内存使用率

大致方法于cpu控制相同

与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap'
-m 或 --memory:设置内存的使用限额'
--memory-swap:设置内存+swap 的使用限额'

--
docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#--vm 1:启动1个内存工作线程'
#--vm-bytes 280M:每个线程分配280M内存'

--
#相应的Cgroup配置文件:/sys/fs/cgroup/memory/memory.limit_in_bytes

docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
#如果让工作线程分配的内存超过300M,分配的内存超过了限额,stress线程会报错,容器退出

--
注意!一旦容器Cgroup使用的内存超过了限制的容量,Linux内核就会尝试收回这些内存'
如果仍旧无法控制内存使用在这个设置的范围之内,就会杀死该进程!'

你可能感兴趣的:(docker,linux,运维)