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时间分配的比重
cat cpu.shares
100
由图片可以看见父控制的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资源。
使用命令:ps ax 可以看见进程被冻结:
对内存的控制
分离出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