Cgroup
简介
Linux Cgroup全称Linux Control Group。是Linux内核的一个功能,用来限制、控制与分离一个进程组群的资源(如CPU、内存、磁盘输出输出等)。这个项目最早是有Google的工程师在2006年发起,最早的名称为进程容器(process containers)。在2007奶奶时,因为在Linux内核中,容器这个名词台过广泛,为避免混乱,被重命名为cgroup,并被合并到2.6.24版的内核中。
主要作用
- 限制资源使用
- 优先级控制
- 一些审计或统计
- 挂起进程,恢复执行进程
Cgroup子系统
名称 | 作用 |
---|---|
cpu 子系统 | 主要限制进程的 cpu 使用率 |
cpuacct 子系统 | 可以统计 cgroups 中的进程的 cpu 使用报告 |
cpuset 子系统 | 可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点 |
memory 子系统 | 可以限制进程的 memory 使用量 |
blkio 子系统 | 可以限制进程的块设备 io |
devices 子系统 | 可以控制进程能够访问某些设备 |
net_cls 子系统 | 可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制 |
net_prio | 这个子系统用来设计网络流量的优先级 |
freezer 子系统 | 可以挂起或者恢复 cgroups 中的进程 |
ns 子系统 | 可以使不同 cgroups 下面的进程使用不同的 namespace |
hugetlb | 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统 |
资源限制
内存资源限制
默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给容器提供的所有资源
- Docker限制可以从Menory、CPU、Block I/O三个方面
- OOME
- 一旦发生OOME,任何进行都有可能被杀死,包括docker daemon
- Docker调整了docker daemon的OOM优先级,以免被内核关闭
CPU资源限制
默认情况下,如果不对容器做任何限制,容器能够占用当前系统中的所有CPU资源
- 大多数进程时采用CFS调度算法
- 1.13Docker版本后支持实时调度算法