参考资料
http://www.ibm.com/developerworks/cn/linux/1506_cgroup/
http://www.elmerzhang.com/2012/11/cgroups-learning-1-introduction/
http://blog.csdn.net/jk198310/article/details/9292667
http://blog.chinaunix.net/uid-20788636-id-4451420.html
1 安装
1.1 系统配置
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015
1.2 安装
- yum install libcgroup(安装cgroup)
2 基本概念
在cgroup中存在几个基本概念:
- 任务(task):在 cgroups 中,任务就是系统的一个进程
- 控制族群(control group):控制族群就是一组按照某种资源限制划分的进程集合。Cgroups 中的资源控制都是以控制族群为单位实现。一个进程可以加入到多个控制族群。一个cgroups一般情况下不止一个进程。
- 子系统(Subsystem):子系统是任务组中的一个模块,一个子系统表示单一的资源,如CPU或者内存
- 层级(hierarchy):控制族群可以组织成 hierarchical 的形式,既一颗控制族群树。子控制组自动继承父节点的特定属性,当然子控制组还可以有自己特定的属性
2.1 子系统
- blkio – 该子系统限制块设备的输入输出访问,例如物理驱动器(磁盘、SSD、USB等)。
- cpu – 该子系统调度 cgroup 任务对 CPU 的访问。
- cpuacct – 该子系统生成 cgroup 中的任务使用 CPU 资源的报告。
- cpuset – 该子系统将各个 CPU 和内存节点指定给 cgroup 中的任务。
- devices – 该子系统可以允许或者禁止 cgroup 中的任务访问某个设备。
- freezer – 该子系统暂停或者继续 cgroup 中的任务。
- memory – 该子系统设置 cgroup 中任务对内存的使用限制,并且生成各任务对内存的使用报告。
- net_col – 该子系统使用类标识符 ( classid ) 来标记网络包,以使用 Linux 流量控制 ( tc ) 能够分辨 cgroup 中的特定任务所发出的数据包。
- net_prio – 该子系统可以动态地设置每个网络接口 ( network interface ) 的优先级。
- ns – 命名空间子系统
服务器支持的子系统可以查看/proc/cgroups查看:
[root@localhost proc]# cat /proc/cgroups #subsys_name hierarchy num_cgroups enabled cpuset 2 1 1 cpu 3 1 1 cpuacct 3 1 1 memory 4 1 1 devices 5 1 1 freezer 6 1 1 net_cls 7 1 1 blkio 8 1 1 perf_event 9 1 1 hugetlb 10 1