你将学到什么

  • 什么是cgroup
  • 如何使用cgroup

Cgroup简介

CGroup是Control Groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的硬件资源的机制。

Cgroup子系统

具体的资源管理功能被称为CGroup子系统或控制器,比如CPU 时间、系统内存和网络带宽等。Red Hat Enterprise Linux 6提供9个cgroup子系统:

子系统 说明
blkio 为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)
cpu 使用调度程序提供对CPU的cgroup任务访问
cpuacct 自动生成cgroup中任务所使用的CPU报告
cpuset 为cgroup中的任务分配独立CPU(在多核系统)和内存节点
devices 允许或者拒绝cgroup中的任务访问设备
freezer 挂起或者恢复cgroup中的任务
memory 设定cgroup中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告
net_cls 使用等级识别符(classid)标记网络数据包,可允许Linux流量控制程序(tc)识别从具体cgroup中生成的数据包

子系统、层级、控制组群和任务的关系

  • 任何单一子系统(比如 cpu)最多可附加到一个层级中
  • 单一层级可附加一个或者多个子系统。
  • 每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认 cgroup(我们称之为 root cgroup)的初始成员。对于您创建的任何单一层级,该系统中的每个任务都可以是那个层级中唯一一个 cgroup 的成员。单一任务可以是在多个 cgroup 中,只要每个 cgroup 都在不同的层级中即可。只要某个任务成为同一层级中第二个 cgroup 的成员,就会将其从那个层级的第一个 cgroup 中删除。一个任务永远不会同时位于同一层级的不同 cgroup 中。
  • 该系统中的任意进程(任务)都将自己分支创建子进程(任务)。该子任务自动成为其父进程所在 cgroup 的成员。然后可根据需要将该子任务移动到不同的 cgroup 中,但开始时它总是继承其父任务的 cgroup(进程术语中称其为“环境”)。

管理Cgroup管理

使用cgconfig管理层级和cgroup

cgconfig.conf配置文件

配置文件结构如下,其中perm选项为可选:

  1. mount {
  2. <controller> = <path>;

  3. }
  4. group <name> {
  5. [<permissions>]
  6. perm {
  7. task {
  8. uid = <task user>;
  9. gid = <task group>;
  10. }
  11. admin {
  12. uid = <admin name>;
  13. gid = <admin group>;
  14. }
  15. } <controller> {
  16. <param name> = <param value>;

  17. }

  18. }

创建层级并附加子系统

  1. ### 修改cgconfig.conf配置文件修改mount字段,并添加如下条目
  2. subsystem = /cgroup/hierarchy;
  3. ### 例如
  4. mount {
  5. cpuset = /cgroup/cpu_and_mem;
  6. }
  7. ### 查询当前系统的Cgroup子系统信息
  8. # lssubsys -am
  9. cpuset /sys/fs/cgroup/cpuset
  10. cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
  11. blkio /sys/fs/cgroup/blkio
  12. memory /sys/fs/cgroup/memory
  13. devices /sys/fs/cgroup/devices
  14. freezer /sys/fs/cgroup/freezer
  15. net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio
  16. perf_event /sys/fs/cgroup/perf_event
  17. hugetlb /sys/fs/cgroup/hugetlb
  18. pids /sys/fs/cgroup/pids

删除子系统

  1. ### 修改cgconfig.conf配置文件修改mount字段,将对应的子系统条目从现有层级中取消层级或者将其移动到不同的层级中

创建控制组群

  1. ### 使用cgcreate命令创建cgroup
  2. # cgcreate -t uid:gid -a uid:gid -g subsystems:path
参数 说明
-t 可选参数,指定用户和组群以便让这个cgroup拥有 tasks伪文件,这个用户可在该cgroup中添加任务
-a 可选参数,指定用户和组群以便这个cgroup拥有 tasks外的所有伪文件,这个用户可修改这个cgroup中的任务对系统资源的访问
-g 指定在其中创建cgroup的层级,格式为与那些层级关联的用逗号分开的subsystems列表。如果这个列表中的子系统在不同的层级中,则要在每个层级中都创建该组群。层级列表后是一个冒号,然后是与该层级有关的子组群path。不要在该path中包含层级挂载点

删除控制组群

  1. ### 使用cgdelete命令删除cgroup
  2. # cgdelete subsystems:path

设定子系统参数

  1. ### 使用cgset命令设定子系统参数
  2. # cgset -r parameter=value path_to_cgroup
参数 说明
parameter 要设定的参数,该参数与给定cgroup的目录中的文件对应。
value 参数设定的值
path_to_cgroup 相对该层级root的cgroup路径,例如:设定root组群的参数,存在/cgroup/cpuacct/文件,则执行cgset -r cpuacct.usage=0 /

移动进程到控制组群

  1. # cgclassify -g subsystems:path_to_cgroup pidlist
参数 说明
subsystems 用逗号分开的子系统列表,或者 * 启动与所有可用子系统关联的层级中的进程
path_to_cgroup 到其层级中的cgroup的路径
pidlist 用空格分开的进程识别符(PID)列表

获取Cgroup信息

查询进程所属Cgroup

  1. # ps -O cgroup
  2. # cat /proc/PID/cgroup

查询子系统

  1. # cat /proc/cgroups
  2. # lssubsys -m subsystems

查询层级

  1. # tree /cgroup/

查询控制组群

  1. # lscgroup
  2. # lscgroup controller:path

显示控制组群的参数

  1. # cgget -r parameter list_of_cgroups
  2. ### 查询参数名称
  3. # cgget -g cpuset /

子系统和可调用参数

参见RedHat官方文档

参考文档

RedHat官方文档

CGroup 介绍、应用实例及原理描述

Lxc的cgroup技术的更多相关文章

  1. 3.Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件

    先说和虚拟化技术的区别 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和names ...

  2. Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件

    先说和虚拟化技术的区别: 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和name ...

  3. docker cgroup技术之cpu和cpuset

    在centos7的/sys/fs/cgroup下面可以看到与cpu相关的有cpu,cpuacct和cpuset 3个subsystem.cpu用于对cpu使用率的划分:cpuset用于设置cpu的亲和 ...

  4. docker cgroup 技术之memory(首篇)

    测试环境centos7 ,内核版本4.20 内核使用cgroup对进程进行分组,并限制进程资源和对进程进行跟踪.内核通过名为cgroupfs类型的虚拟文件系统来提供cgroup功能接口.cgroup有 ...

  5. Docker技术-cgroup

    分类: 虚拟化 Docker容器采用了linux内核中的cgroup技术来实现container的资源的隔离和控制. 关于cgroup我们需要了解的它的知识点: 1. 基本概念 cgroup涉及到几个 ...

  6. Cgroup与LXC简介

    原文地址: https://blog.51cto.com/speakingbaicai/1359825 一.Docker.LXC.Cgroup的结构关系 根据Docker布道师Jerome Petaz ...

  7. docker容器技术基础之linux cgroup、namespace

    一.开头 接触过docker的同学多多少少听过这样一句话"docker容器通过linux namespace.cgroup特性实现资源的隔离与限制".今天我们来尝试学习一下这两个东 ...

  8. 虚拟化之lxc

    LXC 中文名称就是 Linux 容器工具,容器可以提供轻量级的虚拟化,以便隔离进程和资源,使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,本文循序渐进地介绍LXC的建立 ...

  9. CGroup 介绍、应用实例及原理描述

    CGroup 介绍 CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制.记录.隔离进程组 (process groups) 所使用的物力资源 (如 cpu ...

随机推荐

  1. 012_流式计算系统(Mahout协同过滤)

    课程介绍 课程内容 1.Mahout是什么 l  Mahout是一个算法库,集成了很多算法. l  Apache Mahout 是 Apache Software Foundation(ASF)旗下的 ...

  2. IE6、IE7、IE8及其他浏览器多个元素并排显示

    IE6.IE7.IE8及其他浏览器多个元素并排显示 HTML代码 <div class="line"> <h1>全部input框</h1> &l ...

  3. 初步认识Express框架渲染视图

    给出一个简单的例子,讲述模板渲染的基础功能 在nodejs中使用express框架,默认的是ejs和jade渲染模板,以下是以ejs模板进行解析 1.ejs 模板安装 npm install ejs ...

  4. 分享知识-快乐自己:idea的断点调试

    1:Step Over ,进入下一步,如果是方法,那就直接跳过(F8) 2:Step Into,进入下一步,如果是方法,就进入方法内部,但是不会进入jdk封装的方法.(F7) 3:Force Step ...

  5. director.js实现前端路由

    注:director.js的官网 https://github.com/flatiron/director director.js是什么? 理解:前端的route框架,director.js客户端的路 ...

  6. Java企业微信开发_00_源码及资源汇总贴

    一.源码 此系列教程的源码我都放在了github上,欢迎fork以及关注. 传送门:https://github.com/shirayner/WeiXin_QiYe_Demo/tree/master ...

  7. 几个常用的url生成二维码的接口

    找到了几个URL生成的接口,速度上可能会有差别,可试验后选用,我用过第一个,分享: <!doctype html> <html lang="en"> < ...

  8. php-fpm进程内存泄漏

    线上服务器内存报警 线上web8G内存的服务器,内存几乎吃光,top查看,发现php-fpm进程每个都是几十M,php-fpm配置static, 一共150个 解决 排除过程中,其他机器相同配置都没有 ...

  9. I.MX6 USB Camera

    /************************************************************************* * I.MX6 USB Camera * 说明: ...

  10. C++中getline的用法

    在看紫皮书的时候看到getline,然后查了查具体用法,记录下来. #include"iostream" #include"string" using name ...