当前位置 : 首页 » 文章分类 :  开发  »  Linux-CGroup

Linux-CGroup

CGroup 笔记


CGroup 简介

CGroup(Control Group) 是 linux 内核提供的一种可以限制、记录、隔离进程组所使用物理资源的机制。

cgroup 把系统中的进程及其将来创建的子进程进行集中和分类,做统一管理。其中,每一个分组就是一个group,每个group可以有多个进程,group对进程的具体控制行为由子系统(subsystem) 来实现,group以树形结构呈现,子group是父group的一个子集,表示对父group中进程的第一步划分


CGroup 功能

cgroups 提供了四大功能:

  • 资源限制:cgroups 可以对任务是要的资源总额进行限制。比如设定任务运行时使用的内存上限,一旦超出就发 OOM。
  • 优先级分配:通过分配的 CPU 时间片数量和磁盘 IO 带宽,实际上就等同于控制了任务运行的优先级。
  • 资源统计:cgoups 可以统计系统的资源使用量,比如 CPU 使用时长、内存用量等。这个功能非常适合当前云端产品按使用量计费的方式。
  • 任务控制:cgroups 可以对任务执行挂起、恢复等操作。

subsystem 子系统

cgroup 对进程的具体控制行为由 子系统(subsystem) 来实现。

每种类型的子系统代表一种系统资源类型,例如cpu ram 磁盘等。

/proc/cgroups 查看支持的子系统

# cat /proc/cgroups
#subsys_name    hierarchy    num_cgroups    enabled
cpuset          2            249            1
cpu             6            737            1
cpuacct            6            737            1
blkio            5            20630       1
memory            10            1968        1
devices            12            737            1
freezer            3            249            1
net_cls            4            249            1
perf_event        7            249            1
net_prio        4            249            1
hugetlb            8            249            1
pids            11            249            1
rdma            9            3            1

/proc/cgroups 的内容包含四列,从左到右依次是:
1、subsys_name subsystem 的名字

2、hierarchy subsystem 所关联到的 cgroup树的ID,如果多个subsystem关联到同一颗cgroup树,那么他们的这个字段将一样。
如果出现下面的情况,这个字段将为0:
当前subsystem没有和任何cgroup树绑定
当前subsystem已经和cgroup v2的树绑定
当前subsystem没有被内核开启

3、num_cgroups subsystem 所关联的 cgroup树中进程组的个数,也即树上节点的个数

4、enabled 1表示开启,0表示没有被开启(可以通过设置内核的启动参数“cgroup_disable”来控制subsystem的开启).


创建CGroup

cgroup 相关的所有操作都是基于内核中的 cgroup virtual filesystem,使用 cgroup 很简单,挂载这个文件系统就可以了。一般情况下都是挂载到 /sys/fs/cgroup 目录下,当然挂载到其它任何目录都没关系。


下一篇 Spring-Kafka

阅读
评论
658
阅读预计2分钟
创建日期 2022-08-29
修改日期 2022-08-29
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论