第 23 章 使用控制组群为应用程序设置系统资源限制
使用控制组(cgroups
)内核功能,您可以控制应用程序的资源使用情况来更有效地使用它们。
您可以为以下任务使用 cgroups
:
- 为系统资源分配设置限制。
- 将硬件资源优先分配给特定的进程。
- 防止某些进程获取硬件资源。
23.1. 控制组简介
使用 控制组 Linux 内核功能,您可以将进程组织为按层排序的组 - cgroups
。您可以通过为 cgroup
虚拟文件系统提供结构来定义层次结构(控制组树),默认挂载到 /sys/fs/cgroup/
目录。
systemd
服务管理器使用 cgroups
来组织它管理的所有单元和服务。您可以通过创建和删除 /sys/fs/cgroup/
目录中的子目录来手动管理 cgroups
的层次结构。
然后,内核中的资源控制器通过限制、优先处理或分配这些进程的系统资源来在 cgroups
中修改进程的行为。这些资源包括以下内容:
- CPU 时间
- 内存
- 网络带宽
- 这些资源的组合
cgroups
的主要用例是聚合系统进程,并在应用程序和用户之间划分硬件资源。这样可以提高环境的效率、稳定性和安全性。
- 控制组群版本 1
控制组版本 1 (
cgroups-v1
) 提供按资源控制器层次结构。这意味着每个资源(如 CPU、内存或 I/O)都有自己的控制组层次结构。您可以组合不同的控制组层次结构,使一个控制器可以与另一个控制器协调管理各自的资源。但是,当两个控制器属于不同的进程层次结构时,合适的协调会被限制。cgroups-v1
控制器在很长的时间跨度开发,因此其控制文件的行为和命名不一致。- 控制组群版本 2
控制组版本 2 (
cgroups-v2
)提供单一控制组层次结构,用于挂载所有资源控制器。控制文件行为和命名在不同控制器之间保持一致。
注意RHEL 8.2 及更新的版本完全支持
cgroups-v2
。如需更多信息,请参阅 RHEL 8 现在完全支持控制组群 v2。
其它资源
- 内核资源控制器简介
-
cgroups (7)
手册页 - 控制组群中的 systemd 角色