docker-容器实现核心技术:CGroups
容器实现核心技术:CGroups
1. CGroups 概念
- 
Docker利用namespace实现了容器之间资源隔离,但是namespace不能对容器资源限制,比如CPU、内存。
 - 
如果某一个容器属于CPU密集型任务,那么会影响其他容器使用CPU,导致多个容器相互影响并且抢占资源。
 - 
如何对多个容器的资源使用进行限制就成了容器化的主要问题。
 答:引入Control Groups(简称CGroups),限制容器资源
 - 
CGroups:所有的任务就是运行在系统中的一个进程,而CGroups以某种标准将一组进程为目标进行资源分配和控制。例如CPU、内存、带宽等,并且可以动态配置。
 - 
CGroups主要功能:
- 限制进程组使用的资源数量(Resourcelimitation):可以为进程组设定资源使用上限,例如内存
 - 进程组优先级控制(Prioritization):可以为进程组分配特定CPU、磁盘IO吞吐量
 - 记录进程组使用的资源数量(Accounting):例如使用记录某个进程组使用的CPU时间
 - 进程组控制(Control):可以将进程组挂起和恢复
 
 - 
ls/sys/fs/cgroup/-l查看cgroups可控制的资源:
- blkio :对快设备的IO进行限制。
 - cpu:限制CPU时间片的分配,与cpuacct挂载同一目录。
 - cpuacct :生成cgroup中的任务占用CPU资源的报告,与cpu挂载同一目录。
 - cpuset :给cgroup中的任务分配独立的CPU(多核处理器)和内存节点。
 - devices :允许或者拒绝cgroup 中的任务访问设备。
 - freezer :暂停/恢复cgroup 中的任务。
 - hugetlb :限制使用的内存页数量。
 - memory :对cgroup 中任务的可用内存进行限制,并自动生成资源占用报告。
 - net_cls :使用等级识别符(classid)标记网络数据包,这让Linux 流量控制程序(tc)可以识别来自特定从cgroup 任务的数据包,并进行网络限制。
 - net_prio:允许基于cgroup设置网络流量的优先级。
 - perf_event:允许使用perf工具来监控cgroup。
 - pids:限制任务的数量。
 
 
2. 容器实际资源限制位置
/sys/fs/cgroup/<资源名>/docker/<容器ID>
                    
                
                
            
        
浙公网安备 33010602011771号