目录
cgroup,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,
还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups/ (Control groups)实现了对资源的配额和度量。
资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘Io带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制: cgroup可以对任务执行挂起、恢复等操作
控制CPU几个命令
首先启动一个容器,镜像为centos7,命名为test1

启动成功之后进入/sys/fs/cgroup/cpu/docker/
该目录中存放各个容器的cpu管理文件,找到容器对应的id号,进入
进入之后修改period和quota文件
默认情况下文件内容为 100000和-1 -1代表不做任何限制
我们通过编写一个死循环脚本来查看默认情况下的cpu使用情况


运行脚本,并查看此时cpu的使用率
重新打开一个终端

此时修改quota文件,以period文件值作为指示值,以比例的形式修改quota文件值
这里修改为50000,相较于period文件的100000为50%

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

3.2 通过命令修改
重新创建一个容器名为test2 ,在创建的时候指定该容器的cpu使用率在50%
同样,编写脚本测试

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

命令显示此时的test2容器,他的使用率在50%左右
使用--cpu-shares命令可以控制多个容器之间的cpu资源比
重新开两个终端并分开新建容器


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


大致方法于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内核就会尝试收回这些内存'
- 如果仍旧无法控制内存使用在这个设置的范围之内,就会杀死该进程!'