Docker-Linux Cgroups
Docker-Linux Cgroups
什么是Linux Cgroups
Linux Cgroups提供了对一组进程以及将来子进程的资源限制、控制和统计的能力,包含CPU、内存、存储、网络等。通过Cgroups,可以方便的限制某个进程的资源占用,并且可以实时统计监控进程和统计消息。
Cgroups的组件
cgroup
cgroup是对进程分组管理的一种机制,一个cgroup包含一组进程,并且在cgroup 上增加Linux subsystem的各种参数配置,将一组进程和一组subsystem系统参数关联起来
subsystem
subsystem是一组资源控制模块,有下面的几个模块
blkio
设置对块设备(比如硬盘)输入输出的访问控制cpu
设置cgroup中进程的CPU被调度的策略cpuacct
可以统计cgroup中进程调度的CPu占用cpuset
在多核机器上设置cgroup中进程可以使用的CPU和内存(此内存仅适用于NUMA架构)devices
控制cgroup中进程对于设备的访问freezer
用于挂起(suspend)和恢复(resume)cgroup中的进程memory
用于控制cgroup中进程的内存占用net_cls
用于将cgroup中进程产生的网络包分类,以便Linux的tc(traffic controller)可以根据分类区分出来自某个cgroup的包做限流和监控net_prio
设置cgroup中进程产生的网络流量的优先级ns
使cgroup中的进程在新的Namespace中fork新进程(NEWNS)时,创建出一个新的cgroup,这个cgroup包含新的Namespace中的进程
查看当前版本的Kernel支持的subsytem
/ lssubsys -a |
hierarchy
把一组cgroup串成一个树状结构,一个这样的树便是一个hierarchy,通过树状结构,Cgroup实现了继承。
三个组件的关系
- 系统在创建了新的hierarchy之后,系统中所有的进程都会加入到hierarchy的cgroup的根节点,这个cgroup根节点是hierarchy默认创建的
- 一个subsystem只能附加到一个hierarchy上面
- 一个hierarchy可以附加多个subsystem
- 一个进程可以作为多个cgroup的成员,但是这些cgroup必须在不同的hierarchy中
- 一个进程fork出子进程时,子进程和父进程在同一个cgroup,也可以根据需要将其移动到其他的cgroup中
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论