Cgroup是什么(相关概念、功能、作用、特点、怎么用)

article/2025/10/14 11:01:52

文章目录

  • Cgroup
    • 什么是Cgroup
    • Cgroup的相关概念
    • 相互关系
  • Cgroup的功能
  • Cgroup的作用
  • Cgroup的层级图及特点
  • Cgroup怎么用

什么是Cgroup
cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。

这个项目最早是由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年发起,最早的名称为进程容器(process containers)。

在2007年时,因为在Linux内核中,容器(container)这个名词有许多不同的意义,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。自那以后,又添加了很多功能。

Cgroup的相关概念
1.任务(task)。在cgroups中,任务就是系统的一个进程。

2.控制族群(control group)。控制族群就是一组按照某种标准划分的进程。Cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups以控制族群为单位分配的资源,同时受到cgroups以控制族群为单位设定的限制。

3.层级(hierarchy)。控制族群可以组织成hierarchical的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。

4.子系统(subsystem)。一个子系统就是一个资源控制器,比如cpu子系统就是控制cpu时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

相互关系
1.每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认 cgroup(我们称之为 root cgroup ,此cgroup在创建层级时自动创建,后面在该层级中创建的cgroup都是此cgroup的后代)的初始成员。

2.一个子系统最多只能附加到一个层级。

3.一个层级可以附加多个子系统

4.一个任务可以是多个cgroup的成员,但是这些cgroup必须在不同的层级。

5.系统中的进程(任务)创建子进程(任务)时,该子任务自动成为其父进程所在 cgroup 的成员。然后可根据需要将该子任务移动到不同的 cgroup 中,但开始时它总是继承其父任务的cgroup。

Cgroup的功能
cgroups的一个设计目标是为不同的应用情况提供统一的接口,从控制单一进程(像nice)到操作系统层虚拟化(像OpenVZ,Linux-VServer,LXC)。cgroups提供:

        1.资源限制:组可以被设置不超过设定的内存限制;这也包括虚拟内存。
        2.优先级:一些组可能会得到大量的CPU或磁盘IO吞吐量。
        3.结算:用来衡量系统确实把多少资源用到适合的目的上。
        4.控制:冻结组或检查点和重启动。


过去有一段时间,内核开发者甚至把 namespace 也作为一个 cgroups 的 subsystem 加入进来,也就是说 cgroups 曾经甚至还包含了资源隔离的能力。但是资源隔离会给 cgroups 带来许多问题,如 PID 在循环出现的时候 cgroup 却出现了命名冲突、cgroup 创建后进入新的 namespace 导致脱离了控制等等。

Cgroup的作用
Cgroups最初的目标是为资源管理提供的一个统一的框架,既整合现有的cpuset等子系统,也为未来开发新的子系统提供接口。现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层次的虚拟化(OS Level Virtualization)。Cgroups提供了以下功能:

        1.限制进程组可以使用的资源数量(Resource limiting )。比如:memory子系统可以为进程组设定一个memory使用上限,一旦进程组使用的内存达到限额再申请内存,就会触发OOM(out of memory)。
        2.进程组的优先级控制(Prioritization )。比如:可以使用cpu子系统为某个进程组分配特定cpu share。
        3.记录进程组使用的资源数量(Accounting )。比如:可以使用cpuacct子系统记录某个进程组使用的cpu时间
        4.进程组隔离(Isolation)。比如:使用ns子系统可以使不同的进程组使用不同的namespace,以达到隔离的目的,不同的进程组有各自的进程、网络、文件系统挂载空间。
        5.进程组控制(Control)。比如:使用freezer子系统可以将进程组挂起和恢复。


Cgroup的层级图及特点
层级图:

在这里插入图片描述

Cgroup 特点

在 cgroups 中,任务就是系统的一个进程。

控制族群(control group)。控制族群就是一组按照某种标准划分的进程。Cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups 以控制族群为单位分配的资源,同时受到 cgroups 以控制族群为单位设定的限制。

层级(hierarchy)。控制族群可以组织成 hierarchical 的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。

子系统(subsytem)。一个子系统就是一个资源控制器,比如 cpu 子系统就是控制 cpu
时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

Cgroup怎么用
假设现在要将一个新的任务加入到cgroup,功能是将该任务的进程在指定的cpu上运行,因此我们使用"cpuset"cgroup 子系统,操作的大致步骤如下:

1)mount -t tmpfs cgroup_root /sys/fs/cgroup

挂载cgroup根文件系统,类型为tmpfs

2)mkdir /sys/fs/cgroup/cpuset

在cgroupfs根目录下创建子cgroup,名为cpuset

3)mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset

将名为cpuset的cgroup关联到cpuset子系统

4)在cpuset目录下创建目录,生成一个子cgroup,属性文件中写入相应内容,设置属性。

5)启动需要限制的进程,查找其对应的进程ID,将其写入对应的task文件中

以下操作步骤是创建一个名为"Charlie"的cgroup,这个cgroup的资源包含cpu2,cpu3和内存节点1,将shell进程附加到这个cgroup。

mount -t tmpfs cgroup_root /sys/fs/cgroup

mkdir /sys/fs/cgroup/cpuset

mount -t cgroup cpuset -o cpuset /sys/fs/cgroup/cpuset

cd /sys/fs/cgroup/cpuset

mkdir Charlie

cd Charlie

echo 2-3 > cpuset.cpus

echo 1 > cpuset.mems

echo $$ > tasks

sh

cat /proc/self/cgroup


原文链接:https://blog.csdn.net/chen_haoren/article/details/108773459


http://chatgpt.dhexx.cn/article/Ty7GDFyB.shtml

相关文章

Cgroup简介-概述

Cgroup(Control Groups)是这样一种机制:它以分组的形式对进程使用系统资源的行为进行管理和控制。也就是说,用户通过cgroup对所有进程进行分组,再对该分组整体进行资源的分配和控制。 1 Cgroup的结构 cgroup中的每个分…

J2EE技术架构

一、简介 J2EE(Java 2 Platform, Enterprise Edition)是一个为大企业主机级的计算类型而设计的Java平台。Sun微系统(与其工业伙伴一起,例如IBM)设计了J2EE,以此来简化在受客户级环境下的应用开发。由于创造…

J2EE架构模型

从开始学Java Web到现在,使用的J2EE架构一步一步的在改变,从最简单的到越来越复杂,刚开始都是完全就照着每个架构的形式去开发项目,很少自己会想为什么用这样的架构好?好在哪里?现在学了这么久,…

java开发系统架构_Java开发:ECP系统J2EE架构开发平台

一 体系结构 ECP平台是一个基于J2EE架构设计的大型分布式企业协同管理平台,通过采用成熟的J2EE的多层企业架构体系,充分保证了系统的健壮性、开放性和扩展性。可选择部署于多种系统环境,满足不同类型、不同规模企业的需要。企业可以根据自己的…

J2EE的体系架构

转载自:http://zengbo0710.iteye.com/blog/79490 J2EE 即Java2平台企业版,它提供了基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型,这个多层通常通过三层或四层来实现: 1、客户层&…

J2EE体系架构

J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计、开发、组装和部署企业应用。J2EE使用多层分布式的应用模型。 J2EE分层 客户层,执行在客户计算…

基于J2EE架构的在线考试系统-Java(报告+源码+PPT

目前国内基于B/S、C/S结构的在线考试系统产品已经有许多,本文首先介绍了这些考试系统的形成和发展过程,大致结构。然后通过仔细分析,提出了目前的这些系统还存有系统更新和维护等种种弊端,仍不够成熟。基于对现有产品的思考,结合J…

Spring 架构图

http://it.100xuexi.com/view/otdetail/20130426/38b9d40a-138b-4b24-963c-ac029b034fe7.html 1.Spring 架构图 Spring 是一个开源 框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件…

Scala安装教程

1.Scala官网滑到最下面如图: 选择Allversions 2.我们将下载2.12.16版本,如图下 3.选scala-2.12.16.zip安装 4.先将scala-2.12.16zip解压为文件夹我解压到了D盘的scalal文件夹下面 D:\scalal\scala-2.12.16

linux上安装scala教程

Scala教程 一、介绍 cala 是 Scalable Language 的简写,是一门多范式的编程语言,Scala 语言可以运行在Window、Linux、Unix、 Mac OS X等系统上。 安装scala之前,需要在linux上安装jdk,如果没有安装jdk,可以参考这篇…

Scala教程之:可变和不变集合

文章目录 mutable HashMapimmutable HashMap 集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力。在scala中集合主要在三个包里面:scala.collection, scala.collection.immutable和scala.collection.mutable。 scala中引入不…

Scala语法教程

第一章 Scala入门 1.1概述 Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言(静态语言需要提前编译的如:Java、c、c等,动态语言如:js&#xff0…

Scala入门教程

教程目录 0x00 教程内容0x01 Scala 理论1. Scala 基本概念2. Scala 交互式命令行 0x03 Scala 基本语法1. 基础语法2. 标识符3. 注释4. 数据类型5. 常量和变量6. 基本函数7. 局部应用8. 柯里化函数9. 可变长度参数10. 类11. 构造函数12. 继承13. 重载方法14. 抽象类15. 特质16. …

Scala基础教程

简介 Scala是一种结合了面向对象和函数式编程的、静态类型的高级编程语言。 Scala代码被编译成.class文件,运行在Java虚拟机(JVM)上,可以调用Java类库。 官方网站:https://www.scala-lang.org/ 官方文档:https://docs.scala-lan…

scala php,Scala 教程

Scala 教程 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,…

Scala详细教程

Scala详细教程 目录 Scala详细教程 1.Scala 介绍 1.1 什么是 Scala Scala 1.2 为什么要学 Scala 2.开发环境准备 2.1 ScalaSDK 安装 2.1.1Window 下安装 ScalaSDK 2.1.2Linux 下安装 ScalaSDK 2.2 IDEA 安装 2.3 IDEAScala 插件的离线安装 2.4 IDEA 创建 HelloScala…

Scala教程

1. 基础语法 Scala语言是基于Java虚拟机运行的,所以基本的语法和Java是没有区别的。但是为了简化Java的开发以及融合其他的编程语言的优点和特性,Scala在基本的语法上做了大量的修改和优化,让程序员开发起来更简单,方便&#xff…

Scala教程-详细全部

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_39346903/article/details/113562823 文章目录 第1章 Scala入门1.1 概述1.1.1 为什么学习Scala1.…