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 目录下,当然挂载到其它任何目录都没关系。
上一篇 Hibernate
下一篇 Spring-Kafka
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: