Docker-资源管理(cpu,内存,硬盘)

server4上(rhel6.5):
docker所创建的容器使用cgroup来分配资源。

[root@server4 ~]# cd /
[root@server4 /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
#默认是看不到cgroup这个目录的。

yum install -y libcgroup
/etc/init.d/cgconfig start  #开启之后会出现cgroup这个目录
[root@server4 /]# ls
bin  cgroup  etc   lib    lost+found  mnt  proc  sbin     srv  tmp  var
boot  dev     home  lib64  media       opt  root  selinux  sys  usr

对cpu的控制:

添加子控制:

vim /etc/cgconfig.conf 
group x1 {
        cpu {
                cpu.shares = 100;         #表示子控制优先级为100
        }
}
[root@server4 cgroup]# /etc/init.d/cgconfig resart
#在cpu.shares文件中,可以对进程调度程序所处理的进程组设置CPU时间分配的比重

这里写图片描述
由图片可以看见父控制的cpu时间分配值为1024,子控制的cpu时间分配值为100

为server4添加两个cpu:
这里写图片描述
使用 lscpu 可以用来查看cpu个数
测试两个cu的使用情况:
[root@server4 ~]# dd if=/dev/zero of=/dev/null &
这里写图片描述
此时一个cpu被使用。

[root@server4 ~]# dd if=/dev/zero of=/dev/null &
这里写图片描述
此时可以看见两个cpu同时工作,各自处理一条请求。

此时主机总共两颗cpu,其中cpu0为原本的cpu,cpu1为新添加的cpu,新添加的cpu依次命名,其中,添加的cpu是可以停用的。
这里写图片描述
可以看见新添加cpu默认是打开的。
此时运行两条命令:dd if=/dev/zero of=/dev/null &
可以看见:
这里写图片描述
两条命令分别运行在一个cpu上。

停用cpu1,再次top查看:
这里写图片描述
可以发现两条命令在同一个cpu上运行。

查看子控制组x1对cpu0的控制:
这里写图片描述
关掉cpu1,可以看见使用子控制来管理运行在cpu上的服务时,cpu时间分配值小的占用cpu更少

冻结进程:
有些进程对cpu的消耗特别大,但是又不能kill掉,避免对其他进程的影响,应该冻结。

vim /etc/cgconfig.conf 
group x1 {
        freezer {
                }
}
[root@server4 cgroup]# /etc/init.d/cgconfig resart

创建一个消耗cpu的事件:
这里写图片描述
冻结进程:
这里写图片描述
可以看见进程冻结后,不再消耗cpu资源。
使用命令:ps ax 可以看见进程被冻结:
这里写图片描述
echo THAWED > freezer.state #进程解冻

对内存的控制

分离出200M内存进行控制演示:
这里写图片描述

vim /etc/cgconfig
group x1 {
        cpu {
                cpu.shares = 100;
        }

        memory {
                memory.limit_in_bytes = 209715200;  #指定控制的内存大小为200M,如果只有此参数,在使用控制的内存超过200M时,会使用swap分区来顶替
                memory.memsw.limit_in_bytes = 209715200;  #限制所控制的内存和swap分区全部加起来为200M
        }
}
[root@server4 ~]# /etc/init.d/cgconfig restart

[root@server4 ~]# cd /dev/shm/ #一定要在此目录下执行以下命令
这里写图片描述
可以看出未使用子控制系统x1时,可以随意的耗费内存。

这里写图片描述
使用x1控制时,可以看出最多耗费的内存不能超过200M。

利用内存控制对应用的访问:

        cpu {
                cpu.shares = 100;
        }

        memory {
                memory.limit_in_bytes = 20480000;
                memory.memsw.limit_in_bytes = 20480000;
        }
}
[ly@server4 ~]$ vim /etc/cgrules.conf 
ly:memapp2                      memory          x1/
ly:memapp1                      memory          x1/



[ly@server4 ~]$ /etc/init.d/cgconfig restart
[ly@server4 ~]$ /etc/init.d/cgred restart

#本地测试
[root@server4 shm]# cgexec -g memory:x1 /home/ly/memapp2

Process ID is: 1147

Grabbing 8192 pages of memory
Killed
[root@server4 shm]# cgexec -g memory:x1 /home/ly/memapp1

Process ID is: 1148

Grabbing 4096 pages of memory

Success!

#切换到用户
[root@server4 shm]# su - ly
[ly@server4 ~]$ ./memapp1 

Process ID is: 1169

Grabbing 4096 pages of memory

Success!

Press any key to exit

[ly@server4 ~]$ ./memapp2

Process ID is: 1170

Grabbing 8192 pages of memory
Killed

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值