本文共 1623 字,大约阅读时间需要 5 分钟。
Cgroups(控制组)是Linux内核的一个重要功能,用于限制、统计和分离一组进程的资源使用。简单来说,Cgroups允许管理员对特定进程组限制CPU、内存、磁盘输入输出等资源的使用,从而避免资源耗尽或其他安全问题。
任务(Task)
在Cgroups中,任务指的是系统中的一个进程。每个进程都可以独立或加入到多个控制组中。控制族群(Control Group)
控制族群是将进程分组划分的基础单元,用于限制特定进程组的资源使用。一个控制族群可以包含多个进程,管理员可以为每个控制族群设置资源限制。层级结构(Hierarchy)
Cgroups支持层级结构,父节点的属性会自动继承给子节点,但子节点也可以有独立的属性。这种结构使得资源限制更加灵活和有序。子系统(Subsystem)
Cgroups的功能是通过多个子系统实现的,每个子系统(如cpu
、memory
、blkio
等)都有自己的状态和限制方式。例如,memory
子系统用于限制内存使用,cpu
子系统用于限制CPU使用。Cgroups提供了多种子系统,每个子系统负责不同的资源限制和管理:
Blkio
限制块设备的输入/输出流量,适用于磁盘、固态硬盘和其他块设备。CPU
通过调度程序控制进程对CPU的访问频率,确保任务不会占用过多CPU资源。CPUAccounting(CPUacct)
自动生成进程使用的CPU资源报告,帮助管理员监控和管理CPU使用情况。Cpuset
将进程限制在特定的CPU和内存节点中,适用于 NUMA架构的系统。Devices
控制进程对设备的访问权限,确保进程只能访问指定的设备。Freezer
将进程挂起或恢复,用于资源调度和管理。Memory
限制进程使用的内存总量,并生成内存使用报告。NetCls
使用网络类别标记数据包,配合流量控制程序(tc)实现网络流量限制。NetPrio
设置网络传输优先级,类似于 socket 选项,但支持动态管理。HugeTLB
控制大页表(HugeTLB)的资源使用。Cgroups最初由Google开发,后来被Linux内核采用。以下是安装和配置的基本步骤:
查看系统支持
使用lssubsys -all
列出系统支持的子系统,确保Cgroups功能已启用。安装Cgroups工具
如果系统提示缺少lssubsys
,安装 cgroup-bin
软件包。配置Cgroups
使用cfconfig.conf
文件配置Cgroups,定义挂载点和权限。例如,创建一个cpu
子系统并挂载到 /mnt/cgroups/cpu
。用户空间挂载
使用mount -t cgroup
将Cgroups挂载到用户空间,创建层级结构并设置权限。CPU资源控制
通过设置cpu.cfs_quota_us
和 cpu.cfs_period_us
属性,限制进程对CPU的占用率。例如,设置CPU占用率为50%,可以避免某些进程占用过多资源。内存资源管理
使用memory.limit_in_bytes
和 memory.soft_limit_in_bytes
属性,限制内存使用。软限制主要用于优化内存使用情况。进程管理
通过tasks
文件添加进程ID,监控和管理特定进程的资源使用。安装失败
如果提示lssubsys
不存在,安装 cgroup-bin
软件包。子系统不支持
确保内核配置支持相关子系统,例如CONFIG_CGROUPS=y
。资源限制不生效
检查配置文件是否正确,权限是否设置合理,且子系统是否已挂载。通过合理配置Cgroups,管理员可以更好地管理系统资源,优化容器化和虚拟化环境的性能表现。
转载地址:http://vxkfk.baihongyu.com/