blkio: 这个subsystem可以为块设备设定输入/输出限制,比如物理驱动设备(包括磁盘、固态硬盘、USB等)。
cpu: 这个subsystem使用调度程序控制task对CPU的使用。
cpuacct: 这个subsystem自动生成cgroup中task对CPU资源使用情况的报告。
cpuset: 这个subsystem可以为cgroup中的task分配独立的CPU(此处针对多处理器系统)和内存。
devices 这个subsystem可以开启或关闭cgroup中task对设备的访问。
freezer 这个subsystem可以挂起或恢复cgroup中的task。
memory 这个subsystem可以设定cgroup中task对内存使用量的限定,并且自动生成这些task对内存资源使用情况的报告。
perfevent 这个subsystem使用后使得cgroup中的task可以进行统一的性能测试。{![perf: Linux CPU性能探测器,详见https://perf.wiki.kernel.org/index.php/MainPage]}
*net_cls 这个subsystem Docker没有直接使用,它通过使用等级识别符(classid)标记网络数据包,从而允许 Linux 流量.
[root@server1 ~]# useradd zh ##新建用户zh
[root@server1 ~]# su - zh
[zh@server1 ~]$ ulimit -m
unlimited
[zh@server1 ~]$ :(){ :|:& };: ##shell内存炸弹,无限制开启shell
[root@server1 ~]# yum search cgroup
[root@server1 ~]# yum install -y libcgroup.x86_64
[root@server1 ~]# /etc/init.d/cgconfig start
[root@server1 ~]# cd /cgroup/memory/
[root@server1 memory]# cat memory.limit_in_bytes ##查看配置文件可知,内存未做限制
9223372036854775807
[root@server1 ~]# vim /etc/cgconfig.conf
28 group x1 {
29 memory {
30 memory.limit_in_bytes = 209715200;
31 memory.memsw.limit_in_bytes = 209715200; ##完全限制内存
32 }
33 }
[root@server1 ~]# /etc/init.d/cgconfig restart
[root@server1 ~]# cd /cgroup/memory/x1/
[root@server1 x1]# ls
cgroup.event_control memory.memsw.limit_in_bytes memory.swappiness
cgroup.procs memory.memsw.max_usage_in_bytes memory.usage_in_bytes
memory.failcnt memory.memsw.usage_in_bytes memory.use_hierarchy
memory.force_empty memory.move_charge_at_immigrate notify_on_release
memory.limit_in_bytes memory.oom_control tasks
memory.max_usage_in_bytes memory.soft_limit_in_bytes
memory.memsw.failcnt memory.stat
[root@server1 x1]# cat memory.limit_in_bytes
209715200
[root@server1 x1]# cat memory.memsw.limit_in_bytes
209715200
[root@server1 ~]# cd /dev/shm/
[root@server1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.073585 s, 1.4 GB/s
[root@server1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=file bs=1M count=200
Killed
[root@server1 ~]# vim /etc/cgrules.conf
11 zh memory x1/
[root@server1 ~]# /etc/init.d/cgred start
[root@server1 ~]# cd /dev/shm/
[root@server1 shm]# ls
file
[root@server1 shm]# rm -fr file ##删除200M的file文件
[root@server1 shm]# su - zh
[zh@server1 ~]$ cd /dev/shm/
[zh@server1 shm]$ dd if=/dev/zero of=file bs=1M count=300
Killed
[zh@server1 shm]$ logout
[root@server1 ~]# vim /etc/cgconfig.conf
34 group x2 {
35 cpu {
36 cpu.shares = 100;
37 }
38 }
[root@server1 ~]# /etc/init.d/cgconfig restart
[root@server1 ~]# cd /cgroup/cpu/x2/ ##查看cpu的限制
[root@server1 x2]# cat cpu.shares
100
[root@server1 ~]# cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &
[1] 6299
[root@server1 ~]# dd if=/dev/zero of=/dev/null &
[2] 6394
[root@server1 ~]# cd /sys/devices/system/cpu/cpu1
[root@server1 cpu1]# cat online ##cpu1在线
1
[root@server1 cpu1]# echo 0 > online ##使cpu1下线
[root@server1 cpu1]# top
示图:cpu1下线,只有cpu0在线,两个进程的cpu之和为100%
[root@server1 ~]# cat /cgroup/blkio/blkio.throttle.read_bps_device ##无io限制
[root@server1 ~]# vim /etc/cgconfig.conf
39 group x3 {
40 blkio {
41 blkio.throttle.read_bps_device ="252:0 1000000"; #设定io输入、输出速率为1M
42 }
43 }
[root@server1 ~]# /etc/init.d/cgconfig restart
[root@server1 ~]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null &
[1] 10424
[root@server1 ~]# yum install -y iotop
[root@server1 ~]# iotop
[root@server1 ~]# cat /cgroup/freezer/x4/tasks ##无进程任务
[root@server1 ~]# vim /etc/cgconfig.conf
group x4 {
freezer {}
}
[root@server1 ~]# /etc/init.d/cgconfig restart
[root@server1 ~]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null &
[1] 2313
[root@server1 ~]# cd /cgroup/freezer/x4/
[root@server1 x4]# echo 2313 > tasks
[root@server1 x4]# cat freezer.state
THAWED ##进程解冻
[root@server1 x4]# echo FROZEN > freezer.state
示图: ps命令查看进程,进程存在
示图: iotop查看进程,进程不存在,进程冻结
[root@server1 x4]# echo THAWED > freezer.state
示图: ps命令查看进程,进程存在
示图: iotop查看进程,进程存在,进程解冻
[root@server1 ~]# vim /etc/cgconfig.conf
group x5 {
cpuset {
cpuset.cpus = 1; ##2号cpu
cpuset.mems = 0; ##内存片
}
}
[root@server1 ~]# /etc/init.d/cgconfig restart
[root@server1 ~]# cgexec -g cpuset:x5 dd if=/dev/vda of=/dev/null &
[1] 2285
[root@server1 ~]# top
[root@server1 ~]# dd if=/dev/zero of=/dev/null &
[1] 2708