Linux 利用Cgroup 资源控制

  • GreatSQL 社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL 是 MySQL 的国产分支版本,使用上与 MySQL 一致。

cgroups 是 Linux 内核提供的可以限制进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制.

什么是 cgroups

  • 控制族群 (cgroup) - 关联一组 task 和一组 subsystem 的配置参数。一个 task 对应一个进程,cgroup 是资源分片的最小单位。
  • 子系统 (subsystem) - 资源管理器,一个 subsystem 对应一项资源的管理,如 cpu, cpuset, memory 等cpu 子系统,主要限制 cpu 使用率。cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。memory 子系统,可以限制进程的 memory 使用量。blkio 子系统,可以限制进程的块设备 io。devices 子系统,可以控制进程能够访问某些设备。net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。freezer 子系统,可以挂起或者恢复 cgroups 中的进程。ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace。
  • 层级 (hierarchy) - 关联一个到多个 subsystem 和一组树形结构的 cgroup. 和 cgroup 不同,hierarchy 包含的是可管理的 subsystemmount -t cgroup 可以查看当前已经挂载的子系统
  • 任务 (task)- 每个 cgroup 都会有一个 task 列表文件 tasks,一个 task 就对应一个进程。

cpu 子系统

cgroups 的创建很简单,只需要在相应的子系统下创建目录即可。下面我们到 cpu 子系统下创建测试文件夹:

1. 创建 cpu 系统的 cgroup

/sys/fs/cgroup/cpu/ctest