caiguai docker-xware_Docker之cgroup篇

一、CGroup简介:

CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process

groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。2007 年进入 Linux 2.6.24

内核,CGroups 不是全新创造的,它将进程管理从 cpuset 中剥离出来,作者是 Google 的 Paul Menage。CGroups

也是 LXC 为实现虚拟化所使用的资源管理手段。

CGroup 功能及组成

CGroup

是将任意进程进行分组化管理的 Linux 内核功能。CGroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O

或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。这些具体的资源管理功能称为 CGroup 子系统或控制器。CGroup

子系统有控制内存的 Memory 控制器、控制进程调度的 CPU 控制器等。运行中的内核可以使用的 Cgroup

子系统由/proc/cgroup 来确认。

CGroup 提供了一个 CGroup 虚拟文件系统,作为进行分组管理和各子系统设置的用户接口。要使用 CGroup,必须挂载 CGroup 文件系统。这时通过挂载选项指定使用哪个子系统。

二、CGroup子系统介绍:

blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。

cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。

cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。

cpuset -- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。

devices -- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。

freezer -- 这个子系统挂起或者恢复 cgroup 中的任务。

memory -- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。

net_cls -- 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。

ns -- 名称空间子系统。

三、实验内容:实验环境:

RHEL6.5    172.25.44.1     server1.example.com

iptables selinux disabled

2.Cgroup的安装:

[root@server1 ~]# yum install -y libcgroup.x86_64

[root@server1 ~]# /etc/init.d/cgconfig start

Starting cgconfig service:                                 [  OK  ]

3.内存限制:

[root@server1 ~]# ls /cgroup/memory/        ##查看memory可用到的限制

cgroup.event_control             memory.move_charge_at_immigrate

cgroup.procs                     memory.oom_control

memory.failcnt                   memory.soft_limit_in_bytes

memory.force_empty               memory.stat

memory.limit_in_bytes            memory.swappiness

memory.max_usage_in_bytes        memory.usage_in_bytes

memory.memsw.failcnt             memory.use_hierarchy

memory.memsw.limit_in_bytes      notify_on_release

memory.memsw.max_usage_in_bytes  release_agent

memory.memsw.usage_in_bytes      tasks

[root@server1 ~]# cat /cgroup/memory/memory.limit_in_bytes

9223372036854775807            ##内存限制字节数

[root@server1 ~]# vim /etc/cgconfig.conf

group x1 {

memory {

memory.limit_in_bytes=209715200;    ##200*1024*1024=209715200# 限200M

}

}

[root@server1 ~]# /etc/init.d/cgconfig restart

Stopping cgconfig service:                                 [  OK  ]

Starting cgconfig service:                                 [  OK  ]

[root@server1 ~]# df

Filesystem                   1K-blocks    Used Available Use% Mounted on

/dev/mapper/VolGroup-lv_root   6926264 1033680   5540740  16% /

tmpfs                           510120       0    510120   0% /dev/shm

/dev/vda1                       495844   33473    436771   8% /boot

测试:

[root@server1 ~]# cd /dev/shm/

[root@server1 shm]# dd if=/dev/zero of=bigfile bs=1M count=300

300+0 records in

300+0 records out

314572800 bytes (315 MB) copied, 0.216686 s, 1.5 GB/s

在swap,所以,我们还要限制swap

补充配置文件:

[root@server1 shm]# vim /etc/cgconfig.conf

group x1 {

memory {

memory.limit_in_bytes=209715200;

memory.memsw.limit_in_bytes=209715200;

}

}

[root@server1 shm]# /etc/init.d/cgconfig restart

Stopping cgconfig service:                                 [  OK  ]

Starting cgconfig service:                                 [  OK  ]

[root@server1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=300

Killed

4.执行脚本内存限制:

下载脚本 memapp1 memapp2

两个均为 4096 pages of memory (1个pages of memory = 4字节)

加执   行权限,现令memapp1可以执行,memapp2不可以

[root@server1 ~]# chmod +x memapp*

[root@server1 ~]# ./memapp1

-bash: ./memapp1: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

[root@server1 ~]# yum install -y ld-linux.so.2

[root@server1 ~]# ./memapp1

Process ID is: 1217

Grabbing 4096 pages of memory

Success!

Press any key to exit

[root@server1 ~]# ./memapp2

Process ID is: 1218

Grabbing 8192 pages of memory

Success!

Press any key to exit

[root@server1 ~]# vim /etc/cgconfig.conf

group x1 {

memory {

memory.limit_in_bytes=16777216;        ##4096*4*1024=16777216                                                                 memory.memsw.limit_in_bytes=16777216;

}

}

[root@server1 ~]# vim /etc/cgrules.conf

*:memapp1       memory  x1/

*:memapp2       memory  x1/    ##限制任何人在执行这两个脚本时,都遵循x1里的限制

[root@server1 ~]# /etc/init.d/cgconfig restart

Stopping cgconfig service:                                 [  OK  ]

Starting cgconfig service:                                 [  OK  ]

[root@server1 ~]# /etc/init.d/cgred restart

Stopping CGroup Rules Engine Daemon...                     [  OK  ]

Starting CGroup Rules Engine Daemon:                       [  OK  ]

测试:

[root@server1 ~]# ./memapp1

Process ID is: 1271

Grabbing 4096 pages of memory

Success!

Press any key to exit

[root@server1 ~]# ./memapp2

Process ID is: 1272

Grabbing 8192 pages of memory

Killed

5.CPU限制:

优先级区间19 ~ -20 ,19为最低优先级。

修改配置文件:

[root@server1 ~]# vim /etc/cgconfig.conf

group x2 {

cpu {

cpu.shares=100;    ##优先级设为100,小于默认的

}

}

[root@server1 ~]# /etc/init.d/cgconfig restartStopping cgconfig service:                                 [  OK  ]

Starting cgconfig service:                                 [  OK  ]

测试:

若为2个CPU,则关掉一个

[root@server1 ~]# cd /sys/devices/system/cpu/cpu1    (注意:cpu0不可以关掉,里面都没有online的选择)

[root@server1 cpu1]# cat online    ##状态为1,表示cpu正在工作

1

[root@server1 cpu1]# echo 0 > online    ##状态为0,表示关掉cpu

[root@server1 cpu1]# dd if=/dev/zero of=/dev/null &

[1] 1286

[root@server1 cpu1]# dd if=/dev/zero of=/dev/null &

[2] 1287

[root@server1 cpu1]# top    ##可以看到两个进程在均衡占用cpu

    

[root@server1 cpu1]# cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &

[1] 1291

[root@server1 cpu1]# top    ##只有一个资源在占用cpu

[root@server1 cpu1]# dd if=/dev/zero of=/dev/null &

[2] 1293

[root@server1 cpu1]# top    ##可以看到分配的cpu资源不同,因为优先级不同了

6.I/O限制:

查看所限制设备的类型:

[root@server1 cpu1]# ll /dev/vda

brw-rw---- 1 root disk 252, 0 Sep 17 21:06 /dev/vda

[root@server1 cpu1]# ll /dev/sda1

brw-rw---- 1 root disk 8, 1 Sep 17 20:42 /dev/sda1

修改配置文件:

[root@server1 ~]# vim /etc/cgconfig.conf

group x3 {

blkio {

blkio.throttle.read_bps_device="252:0 1024000";

}

}

[root@server1 cpu1]# /etc/init.d/cgconfig restart

测试:

[root@server1 cpu1]# cgexec -g blkio:x3 dd if=/dev/vda of=/dev/null

^C27401+0 records in

27400+0 records out

14028800 bytes (14 MB) copied, 13.9036 s, 1.0 MB/s

限制速度为1M

7.限制freezer:

修改配置文件:

[root@server1 cpu1]# vim /etc/cgconfig.conf

group x4 {

freezer {

}

}

[root@server1 cpu1]# /etc/init.d/cgconfig restart

冻结任务:

[root@server1 cpu1]# cd /cgroup/freezer/x4

[root@server1 x4]# echo 7952 > tasks

cat freezer.state

--> THAWED c活跃状态

FROZEN 冻结状态

echo FROZEN > freezer.state

会发现7592任务被冻结了,但是任务还在进行中,像CPU等都还在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值