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