CGroup 功能及组成
CGroup 是将任意进程进行分组化管理的 Linux 内核功能。CGroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。这些具体的资源管理功能称为 CGroup 子系统或控制器。CGroup 子系统有控制内存的 Memory 控制器、控制进程调度的 CPU 控制器等。运行中的内核可以使用的 Cgroup 子系统由/proc/cgroup 来确认。
CGroup 提供了一个 CGroup 虚拟文件系统,作为进行分组管理和各子系统设置的用户接口。要使用 CGroup,必须挂载 CGroup 文件系统。这时通过挂载选项指定使用哪个子系统。
安装cgroup服务
1 | centos 6 |
配置cgroup配置
这里需要是限制cpu
先创建一个组,把需要限制的进程,启动的时候放到这组下。
vim /etc/cgconfig.conf
1 | mount { |
强制上限的可调参数
1 | cpu.cfs_period_us |
启动cgroup服务
1 | service cgroup restart |
启动 yarn 服务
1 | su - hadoop |
注释: 用cgexe启动的服务,他的子进程也会在这个cgroup组下。总体cpu加和不会超过组的设置。
查看进程在哪个组下:
1 | [hadoop@db-datanode09 ~]$ ps -eo pid,cgroup,cmd |
检查服务
1 | cd /sys/fs/cgroup/cpu/yarn |
这是在 /cgroup/cpu/ 目录下就会出现 yarn 目录, 权限是hadoop用户
1 | [root@db-datanode09 cpu]# cd /cgroup/cpu/yarn |
cgroup服务几种模式介绍
cgroup 配置文件说明
1 | mount { |
cpu限制
cgroup中对cpu资源控制的方式大约有三种:
1.通过cpu子系统中的cpu quote方式
2.通过cpu子系统中的cpu share方式
3.通过cpuset子系统中的cpuset 将任务绑定到相应的cpu核上
cpuset的方式是限定任务可以在哪些cpu上运行;cpu share的方式,是在控制群组中设置权重,通过权重和任务等来分配能够使用cpu的资源;
通过cpu quote方式来限制
启动cgroup服务后,可以在/cgroup/cpu目录下看到如下文件:
1 | total 0 |
这里做一下说明:
cpu.cfs_period_us: 单位是微秒,最大值是1s,最小值是1毫秒(ms),取值范围为1000-1000000
cpu.cfs_quota_us 单位是微秒,意思是在 cpu.cfs_period_us的时间内,用户可以占用的时间。对于单核来说,最大等于 cpu.cfs_period_us的值,对于多核来说,可以理解为最多可使用的cpu核数
cpu.stat:
nr_periods 时间间隔, 指经过了多少个cpu.cfs_period_us的时间间隔 nr_throttled 被限制运行的次数 throttled_time 总共被限制的时间,微秒
在多核的系统中, cpu.cfs_quota_us/cpu.cfs_period_us 的值就是可以使用的最大的cpu的核数
tasks 将需要控制的任务的id写入到tasks文件中,就可以控制资源了
分组
cpu限制也有分组、分层的概念,
如: /cgroup/cpu 这是cpu的根级,默认不限制cpu使用量,
/cgroup/cpu/yarn 这是cpu下的一层,也是一个组,他的cpu使用量不能大于上一层设置。
还可以在/cgroup/cpu/yarn 下创建其他层。
进程添加到控制组
- 单一pid添加到某个控制组
echo pid > /cgroup/cpu/yarn/tasks - cgrule服务
用法:
user hierarchies control_group
user:command hierarchies control_group
当在user 使用前缀时代表是一个组群而不是单独用户例如@admins 是admins组群中的所有用户
cgrule配置文件在/etc/cgrule.conf,配置好启动服务后就可以根据规则自动将任务附加到控制群组了。
如:
vim /etc/cgrule.conf
1 |
|
启动服务:
/etc/init.d/cgred restart
- cgexec 命令启动服务
用法:
cgexec -g subsystems:path_to_cgroup command arguments
如:
cgexec -g cpu:yarn yarn-daemon.sh start nodemanager
redhat cgroup
关于其他资源 如 memory、network等限制,可以参考 radhat cgroup的介绍
地址:
centos 6
https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html-single/Resource_Management_Guide/index.html#chap-Introduction_to_Control_Groups
感觉文章还可以的话,帮忙点点下面的广告哦! 谢谢支持!