Linux cgroup(控制组)是Linux内核提供的一种机制,用于限制、记录和隔离进程组所使用的系统资源(如CPU、内存、磁盘I/O等)。它是容器技术(如Docker、LXC)的核心基石之一,也是系统管理员进行精细资源控制的重要工具。简单来说,cgroup允许你将进程组织成层次结构,并针对每个层次设置资源限制,从而实现多租户环境下的资源隔离与保障。
cgroup的核心设计包括子系统和层级结构。子系统代表一种资源控制器,例如cpu子系统控制CPU时间分配,memory子系统控制内存使用。每个子系统可以附加到一个或多个层级(hierarchy),每个层级对应一个cgroup文件系统挂载点。在同一个层级内,可以创建多个cgroup节点,形成树状结构,每个节点包含一组进程,并关联该子系统下的资源限制参数。这种设计使得cgroup能够灵活地管理不同粒度的进程集合。
这些功能共同构成了Linux下精细化的资源控制体系,使得管理员能够根据业务需求动态调整资源分配。
cgroup有两个主要版本:v1和v2。cgroup v1允许每个子系统独立挂载,导致多层级复杂且易出错;而cgroup v2引入了统一层级,所有子系统挂载在同一层级下,简化了管理并增强了安全性。当前主流发行版逐渐转向cgroup v2,但为了兼容性,许多工具仍支持v1。理解两者的差异有助于在实际环境中正确应用cgroup原理。
下面通过一个简单示例演示如何使用cgroup限制进程的CPU和内存。以Ubuntu 20.04(使用cgroup v2)为例:
# 1. 创建cgroup目录sudo mkdir /sys/fs/cgroup/example# 2. 查看默认生成的文件(cpu.max, memory.max等)ls /sys/fs/cgroup/example# 3. 设置CPU限制(例如最多使用50%的CPU,即100000微秒内最多运行50000微秒)echo "50000 100000" | sudo tee /sys/fs/cgroup/example/cpu.max# 4. 设置内存限制(例如最多200MB)echo 200000000 | sudo tee /sys/fs/cgroup/example/memory.max# 5. 将当前shell进程加入cgroup(PID写入cgroup.procs)echo $$ | sudo tee /sys/fs/cgroup/example/cgroup.procs# 6. 运行一个消耗资源的程序测试,例如stress工具stress --cpu 1 --timeout 30# 观察资源使用情况,可以通过top或查看cgroup统计文件 通过以上步骤,你已成功实践了cgroup实践的核心操作。对于更复杂的场景,可以结合systemd或libcgroup工具集进行管理。
本文从原理到实践全面解析了Linux cgroup,包括其设计思想、主要功能以及具体操作。无论是容器开发者还是系统运维人员,掌握cgroup都能帮助你更好地实现资源隔离和优化。未来随着cgroup v2的普及,资源控制将变得更加简洁高效。
本文由主机测评网于2026-03-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:http://www.vpshk.cn/20260330087.html