CGroup
1. 作用背景
Namespace 只完成资源隔离,但不能限制 CPU、内存等物理硬件资源。多个容器同时运行,高负载容器会抢占宿主机硬件,影响其他业务,CGroups 用来解决这个资源争抢问题。
2. CGroups 是什么
CGroups(Control Groups)是 Linux 内核机制,对进程做分组管理,为分组设置资源限制,实现资源的限制、控制、监控,是容器核心技术之一。
核心功能
- 限制进程资源使用上限(CPU、内存),防止资源耗尽。
- 设置不同分组的资源优先级。
- 统计监控各组资源使用情况。
- 对进程执行挂起、恢复等操作。
- 支持层级嵌套,分组可以树形结构嵌套。
3. 子系统 subsystem
不同子系统管控不同硬件资源,挂载在/sys/fs/cgroup:
- cpu:限制 CPU 使用率,分配 CPU 时间片
- memory:限制内存、交换分区上限
- blkio:磁盘 IO 读写限制
- devices:管控设备访问权限
- freezer:挂起 / 恢复进程
- net_cls:网络流量标记控制
- pids:限制进程数量
4. 内存限制实验要点
- 在/sys/fs/cgroup/memory下创建子目录,就生成一个 cgroup 控制组,内核自动生成配置文件。
- 修改memory.limit_in_bytes设置内存上限;tasks文件写入进程 PID,把进程加入该控制组。
- 当进程内存消耗到达阈值,内核会终止进程。
- 删除控制组目录即可释放,前提 tasks 内没有残留进程。
5. 版本发展
- CGroup v1:早期版本,各个子系统独立目录。
- CGroup v2:内核 4.5 引入,架构重新设计,管理更高效。
Docker、K8s 大量使用 CGroups 对容器做 CPU、内存、IO 资源管控。
简短总结
Namespace 负责隔离看得见的资源视图,CGroups 负责限制硬件资源用量。CGroups 通过子系统管理各类资源,把进程加入控制组实现配额限制,是容器必不可少的技术。