Linux Cgroups 介绍

Linux Cgroups 介绍

Linux Cgroups (Control Groups )提供了对一组进程及将来子进程的资源限制、控制和统计的能力,这些资源包括CPU、内存、存储、网络等。

Cgroups 中的3 个组件

cgroup : 是对进程分组管理的一种机制, 一个cgroup包含一组进程,井可以在这个cgroup上增加Linux subsystem 的各种参数配置,将一组进程和一组 subsystem 的系统参数关联起来。

subsystem :是一组资源控制的模块, 一般包含模块有(blkio、cpu、cpuacct、devices、memory、net_cls、ns)等,分别对各自的资源进行控制或统计

每个subsystem 会关联到定义了相应限制的cgroup 上,并对这个cgroup 中的进程做相应的限制和控制。

hierarchy : 把一组cgroup 串成一个树状的结构,一个这样的树便是一个hierarchy ,通过这种树状结构, Cgroups 可以做到继承。

三个组件的关系

系统在创建了新的hierarchy 之后,系统中所有的进程都会加入这个hierarchy 的cgroup根节点,这个cgroup 根节点是hierarchy 默认创建的,

一个subsystem 只能附加到一个hierarchy 上面。一个hierarchy 可以附加多个subsystem 。

一个进程可以作为多个cgroup 的成员,但是这些cgroup 必须在不同的hierarchy 中。

一个进程fork 出子进程时,子进程是和父进程在同一个cgroup 中的,也可以根据需要将其移动到其他cgroup 中。

docker 是如何使用cgroup的

docker运行如果指定了资源限制,在启动docker后会为每个容器创建cgroup

/sys/fs/cgroup/memory/docker/033356e3a4ae33ff2b248d2386ebd1d8ff1bcaa7991dbab4d992a97e2c33ae4a
# cat memory.limit_in_bytes 
9223372036854771712
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。