本文以centos6.5为例,24 cpu:

一.cgroup基本概念

1.1subsystem 子系统

blkio      为块设备输入输出设置,比如物理设备(磁盘,usb等)
cpu        使用调度程序对cpu的使用控制
cpuacct    自动生成cgroup中的cpu使用的报告
cpuset     为cgroup中的任务分配独立的cpu
devices    允许或拒绝cgroup中的任务访问设备
freezer    挂起或者恢复任务
memory     管理任务的内存
net_cls    控制网络流量
ns         名称空间子系统

1.2 hierarchy 层级

1.3 control groups 控制群组

1.4 Tasks 任务

 cgroup中的任务的概念可以简单理解为进程

1.5 上述四者之间的关系

mount 选项中是要挂载subsystem 以及对应的层级

默认的系统配置如下:

cat /etc/cgconfig.conf

# By default, mount all controllers to /cgroup/<controller>mount {cpuset  = /cgroup/cpuset;cpu = /cgroup/cpu;cpuacct = /cgroup/cpuacct;memory  = /cgroup/memory;devices = /cgroup/devices;freezer = /cgroup/freezer;net_cls = /cgroup/net_cls;blkio   = /cgroup/blkio;
}

有以下四种原则:

1.5.1 任何单一子系统只可以附加到一个层级中

1.5.2 单一层级可以附加一个或者多个子系统

1.5.3 任务只能够附加到是 同一个crontol group的某一级,而不能同时属于根是同一group的其他层级。

1.5.4子任务自动成为父任务所在的cgroup组的成员。

二.cgroup对cpu资源的控制(这里主要使用cpu子系统)

2.1概述

cgroup中对cpu资源控制的方式大约有三种:

1.通过cpu子系统中的cpu quote方式

2.通过cpu子系统中的cpu share方式

3.通过cpuset子系统中的cpuset 将任务绑定到相应的cpu核上

cpuset的方式是限定任务可以在哪些cpu上运行;cpu share的方式,是在控制群组中设置权重,通过权重和任务等来分配能够使用cpu的资源;这两种这里不过详细介绍。

2.2通过cpu quote方式来限制

启动cgroup服务后,可以在/cgroup/cpu目录下看到如下文件:

total 0
--w--w--w- 1 root   root   0 Jul 26 11:44 cgroup.event_control
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cgroup.procs
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cpu.cfs_period_us
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cpu.cfs_quota_us
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cpu.rt_period_us
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cpu.rt_runtime_us
-rw-r--r-- 1 root   root   0 Jul 26 11:44 cpu.shares
-r--r--r-- 1 root   root   0 Jul 26 11:44 cpu.stat
-rw-r--r-- 1 root   root   0 Jul 26 11:44 notify_on_release
-rw-r--r-- 1 root   root   0 Jul 26 11:44 release_agent
-rw-r--r-- 1 root   root   0 Jul 26 11:44 tasks

这里做一下说明:

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文件中,就可以控制资源了

2.3 group设置

以以下配置文件为例

 mount {#       cpuset  = /cgroup/cpuset;cpu     = /cgroup/cpu;#       cpuacct = /cgroup/cpuacct;#       memory  = /cgroup/memory;#       devices = /cgroup/devices;#       freezer = /cgroup/freezer;#       net_cls = /cgroup/net_cls;#       blkio   = /cgroup/blkio;}group yarn {perm {task {uid = hadoop;gid = hadoop;}admin {uid = hadoop;gid = hadoop;}}cpu {cpu.cfs_period_us= 100000;cpu.cfs_quota_us= 2160000;}}

控制组yarn,cpu最多可以使用21.6核。该控制组的权限为hadoop用户,由perm来配置task和admin权限。cpu{}表示附加的子系统。

cgroup启动后,在/cgroup/cpu/yarn目录下,可以查看文件相应的配置

2.4 任务添加到控制组

cgroup支持几种方式将任务添加到控制组。

2.4.1 echo pid > /cgroup/cpu/yarn/tasks

2.4.2 cgrule服务

用法:

user hierarchies control_group

user:command hierarchies control_group

当在user 使用前缀时代表是一个组群而不是单独用户例如@admins 是admins组群中的所有用户

cgrule配置文件在/etc/cgrule.conf,配置好启动服务后就可以根据规则自动将任务附加到控制群组了。

2.4.3 cgexec

用法:cgexec -g subsystems:path_to_cgroup command arguments

三.hadoop的nodemagner启用cgroup

cgexec -g cpu:yarn yarn-daemon.sh start nodemanager

这种方式是可以在不使用hadoop自带的cgroup功能,而启动linux的cgroup服务来实现yarn的资源控制。(我在centos6.5启用hadoop cgroup会导致服务器不定时宕机,但是一直找不到原因,大家有类似的解决办法可以评论下),所以后来才考虑这种方式来限制cpu资源,并且运行良好。

linux cgroup 学习的一些总结相关推荐

  1. linux cgroup学习总结

    linux-cgroup使用 大纲 概念 安装与使用 概念 基础知识 cgroups 是Linux内核提供的一种可以限制,隔离单个进程或者多个进程组 (process groups)所使用物理资源的机 ...

  2. 深入理解 Linux Cgroup 系列(二):玩转 CPU

    原文链接:深入理解 Linux Cgroup 系列(二):玩转 CPU 上篇文章主要介绍了 cgroup 的一些基本概念,包括其在 CentOS 系统中的默认设置和控制工具,并以 CPU 为例阐述 c ...

  3. 适合小白的Linux入门学习教程,从安装到实操(涵盖各种常用指令,超详细!)

    Linux入门学习 Linux简介 Linux是什么 Linux的特点 Linux和Windows的区别 Linux入门 我们为什么要学习Linux 环境搭建 安装CentOS 购买云服务器 走进Li ...

  4. 关于cgroup 学习

    一.前言 cgroup在K8S中有重要应用,K8S参考书籍: kubernetes权威指南第5版 公司一个项目用linux 的 cgroup 技术来限制进场cpu和内存使用,具有非常好的学习意义,所以 ...

  5. Linux内核学习008——进程管理(四)

    Linux内核学习007--进程管理(四) 进程家族树 Unix系统的进程之间存在一个明显的继承关系,所有的进程都是PID为1的init进程的后代.内核在系统启动的最后阶段启动init进程,然后ini ...

  6. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  7. 与 Linux 一起学习:学习打字

    "与 Linux 一起学习"的所有文章: 与 Linux 一起学习:学习打字 与 Linux 一起学习:学习物理 与 Linux 一起学习:学习音乐 与 Linux 一起学习:学习 ...

  8. Linux系统管理学习路线图

    Linux系统管理学习路线图 随着Linux应用的扩展,许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.作为一个Linux系统管理员,我看了许多有关L ...

  9. Linux.NET学习手记(2)

    上一回合,我们讨论学习了如何在Linux环境中搭建能够供.NET运行的环境,不知道各位读者是否已经完成了环境的搭建?不过,无论各位读者是采用我们上回合介绍的方法还是采用网上提供的其他方法搭建Linux ...

  10. linux系统管理学习笔记之一-------linux解压缩命令

    linux系统管理学习笔记之一-------linux解压缩命令 2009-12-29 11:52:55 标签:linux tar [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接 ...

最新文章

  1. python 实现文本自动翻译功能
  2. 【php】命名空间 和 自动加载的关系
  3. IntelliJ IDEA 运行 Maven 项目
  4. 2018年的AI/ML惊喜及预测19年的走势(二)
  5. HDU - 2018 母牛的故事
  6. Martin Fowler 经典软件著作合集
  7. DeepFaceLab报错,CUDA driver is insufficient 解决方法!
  8. Datawhale 社区黑板报(第1期)
  9. 计算机仿真实验报告实验原理简述,数控编程实验报告总结
  10. double IE之H3CIE之路--我的H3CIE考试经历
  11. JAVA 超详细 将文件夹目录打包为 ZIP 压缩包并下载
  12. activiti-邮件任务
  13. stable diffusion--二次元福利
  14. win10要关闭自动更新吗?看完你就有答案了
  15. 全球与中国PMN-PT单晶市场深度研究分析报告
  16. 电脑怎么连接两个以上的显示器
  17. 会说话的简历 TalkingCV
  18. 作为师兄,给电子信息相关毕业生的一些简历建议
  19. 4G七问, 读懂4G的核心问题
  20. 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. ShellServiceObjectDelayLoad中的webcheck疑问
  2. 关于Bundle Adjustment(BA)的直观理解
  3. 台式电脑一般价钱多少_一般普通台式电脑价格多少为好?
  4. 单出口双防火墙双核心冗余_王术芳/海关缴款书抵扣和出口退税操作变化要点解析...
  5. ANSYS apdl命令流笔记14-------工作平面的变换与生成
  6. Fragment和Activity之间的通信
  7. tf.app.flags
  8. MySQL讲义第49讲——select 查询之查询练习(七):使用多种方法添加排名
  9. MySQL讲义第 46 讲——select 查询之查询练习(四)
  10. kali安装磊科NW392教程