在学习了解docker的时候介绍到LXC(Linux Container)和Cgroup的概念,菜鸟一枚,所以先学习了解下什么是Cgroup
Cgroup是将任意进程进行分组化管理的Linux内核功能。cgroup本身提供将进程进行分组化管理的功能和接口的基础结构。这里的分组化管理限制某个进程或者某些进程使用资源的过程,也就是所谓实现一组容器。在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。于是就出现了cgroup的概念,cgroup就是controller group,最初由google的工程师提出,后来被整合进Linux内核中。
一、基本概念
Cgroup: controller group
task:
一个进程
control group:
控制族群,按照某种标准划分的进程组
hierarchy:
层级,control group可以形成树形的结构,有父节点,子节点,每个节点都是一个control group,子节点继承父节点的特定属性。
subsystem:
子系统。子系统就是资源控制器,每种子系统就是一个资源的分配器,比如cpu子系统是控制cpu时间分配的。
二、安装和启动
以centos为例 安装cgroup
yum install libcgroup
启动方式
对于yum 安装的服务,启动可以采用 service cgconfig start/stop/restart
或者采用 /etc/init.d/cgconfig start/stop/restart
cgconfig启动的时候默认读取/etc/cgconfig.conf ,根据其配置来创建或者挂载指定的cgroup子系统
三、配置
cgroup详细配置在 /etc/cgconfig.conf 里面
1,mount section
mount { <controller> = <path>; ... } ######################################### # controller:内核子系统的名称 # path:该子系统的挂载点 #########################################
目的是在 /etc/cgroup下面创建对应的目录并且挂载对应的controller到 path下面去。
/etc/cgconfig.conf 里面除了配置mount section外 也可以配置group section
2,group section
group <name> { [<permissions>] <controller> { <param name> = <param value>; … } … } ################################################################################ ## name: 指定cgroup的名称 ## permissions:可选项,指定cgroup对应的挂载点文件系统的权限,root用户拥有所有权限。 ## controller:子系统的名称 ## param name 和 param value:子系统的属性及其属性值 #################################################################################
创建对应的cgroup 'name' ,并且设置权限。
定义子系统的属性及其值等
四、进程加入到cgroup
当创建好配置并且启动cgconfig之后,就会在对应的目录下面产生相关的限制配置文件。e.g.
[root@testserver cgroup]# ls -lart memory.* -rw-r--r-- 1 root root 0 8月 4 15:07 memory.use_hierarchy -r--r--r-- 1 root root 0 8月 4 15:07 memory.usage_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.swappiness -r--r--r-- 1 root root 0 8月 4 15:07 memory.stat -rw-r--r-- 1 root root 0 8月 4 15:07 memory.soft_limit_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.move_charge_at_immigrate -r--r--r-- 1 root root 0 8月 4 15:07 memory.memsw.usage_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.memsw.max_usage_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.memsw.limit_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.memsw.failcnt -rw-r--r-- 1 root root 0 8月 4 15:07 memory.max_usage_in_bytes -rw-r--r-- 1 root root 0 8月 4 15:07 memory.limit_in_bytes --w------- 1 root root 0 8月 4 15:07 memory.force_empty -rw-r--r-- 1 root root 0 8月 4 15:07 memory.failcnt
在当前文件夹下面有个特殊的文件
[root@testserver cgroup]# ls -lart tasks -rw-r--r-- 1 root root 0 8月 4 15:07 tasks
只要把需要限制的进程加入到这个文件就可以达到预期的目标
echo "xxxx" >>tasks
来源:https://www.cnblogs.com/colin5603/p/4221519.html