文章目录
- 1 cgroup 的主要功能
 - 1.1 资源限制
 - 1.2 优先级控制
 - 1.3 资源隔离
 - 1.4 资源监控
 
- 2 cgroup 的层次结构
 - 3 cgroup 子系统
 - 4 示例:使用 cgroup 控制 CPU 和内存
 - 4.1 创建 cgroup
 - 4.2 设置资源限制
 - 4.3 将进程添加到 cgroup
 
- 5 使用 systemd 管理 cgroup
 - 6 总结
 - 参考链接
 - 封面
 
cgroup是Linux内核提供的一种机制,用于限制、记录和隔离进程组的资源使用情况。
1 cgroup 的主要功能
1.1 资源限制
cgroup可以限制进程组可以使用的资源量,如CPU、内存、磁盘I/O等。
1.2 优先级控制
设置进程组的优先级,确保关键任务优先获得资源。
1.3 资源隔离
将不同进程组的资源使用情况隔离开,防止一个进程组的资源消耗影响到另一个。
1.4 资源监控
监控和记录进程组的资源使用情况,便于分析和优化。
2 cgroup 的层次结构
cgroup 采用层次结构(hierarchy),通过将节点组织成树状结构来管理资源。每个节点称为一个 cgroup,根节点为系统的初始 cgroup。每个 cgroup 可以包含若干子 cgroup,这样便于对进程进行分层管理。
3 cgroup 子系统
cgroup 支持多种子系统(也称为控制器),每个子系统负责管理一种或多种资源。常见的子系统包括:
- cpu:限制和监控CPU使用情况。
 - cpuacct:记录CPU使用情况。
 - memory:限制和监控内存使用情况。
 - blkio:限制和监控块设备I/O使用情况。
 - net_cls:限制和监控网络带宽使用情况。
 - freezer:冻结和恢复进程。
 
4 示例:使用 cgroup 控制 CPU 和内存
以下是一个简单示例,展示如何使用 cgroup 控制 CPU 和内存资源。假设我们要创建一个 cgroup,并限制其中进程的CPU使用率为50%,内存使用量为100MB。
4.1 创建 cgroup
sudo mkdir /sys/fs/cgroup/cpu/mygroup
sudo mkdir /sys/fs/cgroup/memory/mygroup
 
4.2 设置资源限制
# 限制 CPU 使用率为 50%
echo 50000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo 100000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
# 限制内存使用量为 100MB
echo 100M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
 
4.3 将进程添加到 cgroup
假设我们有一个进程ID为 1234,要将其添加到 mygroup:
echo 1234 | sudo tee /sys/fs/cgroup/cpu/mygroup/tasks
echo 1234 | sudo tee /sys/fs/cgroup/memory/mygroup/tasks
 
这样,进程 1234 的CPU使用率将被限制在50%以内,内存使用量被限制在100MB以内。
5 使用 systemd 管理 cgroup
在现代Linux发行版中,systemd 已经集成了对 cgroup 的管理。你可以通过 systemd 的服务单元文件(service unit file)来定义资源限制。例如,创建一个名为 myservice.service 的服务单元文件:
[Unit]
Description=My Service
[Service]
ExecStart=/path/to/your/application
CPUQuota=50%
MemoryLimit=100M
[Install]
WantedBy=multi-user.target
 
然后使用 systemctl 命令启动和管理服务:
sudo systemctl daemon-reload
sudo systemctl start myservice
 
6 总结
- cgroup 是什么:cgroup 是Linux内核提供的机制,用于限制、记录和隔离进程组的资源使用。
 - 主要功能:资源限制、优先级控制、资源隔离和资源监控。
 - 层次结构:cgroup 采用树状层次结构,便于分层管理进程。
 - 子系统:cgroup 支持多个子系统,每个子系统负责管理一种资源。
 - 示例:通过命令行创建和管理 cgroup,或者使用 
systemd集成管理。 
参考链接
- Linux cgroup Documentation
 
封面
由 DALL-E-3 生成
 





![[WUSTCTF2020]朴实无华1](https://i-blog.csdnimg.cn/direct/c810468159d647ed8d6cf9dfffd8f523.png)













