cgroups

**cgroups(控制组)** 是 Linux 内核的一项功能,用于对进程或进程组进行**资源分配、限制和隔离**。它通过将进程分组并管理这些组的资源使用(如 CPU、内存、磁盘 I/O 等),实现系统资源的精细化控制。

 

---

 

### **核心功能**

1. **资源限制**  

   - 限制组内进程的资源使用量(如内存上限、CPU 配额)。

2. **优先级控制**  

   - 分配资源使用的权重(如为关键进程分配更多 CPU)。

3. **资源统计**  

   - 监控组内进程的资源消耗(如 CPU 使用时长)。

4. **进程隔离**  

   - 结合命名空间(namespaces)实现容器化环境(如 Docker、Kubernetes)。

 

---

 

### **关键概念**

- **子系统(Controllers)**  

  每种资源类型对应一个子系统,例如:

  - `cpu`:限制 CPU 时间。

  - `memory`:控制内存使用量。

  - `blkio`:限制块设备 I/O。

  - `devices`:控制设备访问权限。

  - `freezer`:暂停/恢复进程组。

 

- **层级结构**  

  cgroups 按树形层级组织,子组继承父组的限制,并可添加额外规则。

 

- **管理接口**  

  通过虚拟文件系统(通常挂载在 `/sys/fs/cgroup`)配置参数,例如:

  - 设置内存限制:`echo 100M > /sys/fs/cgroup/memory/group1/memory.limit_in_bytes`。

 

---

 

### **cgroups v1 vs v2**

- **v1**:各子系统独立管理,可能导致配置碎片化。

- **v2**:统一层级结构,支持跨子系统协同限制(如同时限制 CPU 和内存),功能更一致。

 

---

 

### **应用场景**

1. **容器技术**  

   Docker、Kubernetes 使用 cgroups 限制容器的资源使用。

2. **多租户系统**  

   防止单个用户/服务耗尽系统资源。

3. **性能优化**  

   确保关键服务(如数据库)获得足够资源。

 

---

 

### **操作示例**

- **通过命令行工具**(需安装 `cgroup-tools`):

  ```bash

  # 创建 cgroup

  cgcreate -g cpu,memory:/my_group

  # 设置 CPU 限制

  cgset -r cpu.cfs_quota_us=50000 /my_group

  # 将进程加入 cgroup

  cgexec -g cpu,memory:/my_group ./my_process

  ```

 

- **通过 systemd**:  

  使用 `systemctl set-property` 为服务动态调整资源限制。

 

---

 

### **与 Namespaces 的关系**

- **Namespaces**:隔离进程的视图(如文件系统、网络、PID),提供独立的运行环境。

- **cgroups**:控制资源分配。  

  两者结合(如 Docker)实现完整的容器化:隔离 + 资源限制。

 

---

 

cgroups 是 Linux 系统资源和容器技术的基石,通过精细化的资源管理提升系统稳定性和效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值