第 24 章 使用 cgroups-v2 控制应用程序的 CPU 时间分布


有些应用程序占用太多的 CPU 时间,这可能会对您环境的整体健康状况造成负面影响。您可以将应用程序置于 控制组版本 2 (cgroups-v2) 中,并为这些控制组配置 CPU 限制。因此,您可以控制应用程序的 CPU 消耗。

关于如何控制分配给控制组群的 CPU 时间分布,用户有两种方法:

  • 设置 CPU 带宽 (编辑 cpu.max 控制器文件)
  • 设置 CPU 权重 (编辑 cpu.weight 控制器文件)

24.1. 挂载 cgroups-v2

在启动过程中,RHEL 8 默认挂载 cgroup-v1 虚拟文件系统。要利用 cgroup-v2 功能限制应用程序的资源,请手动配置系统。您可以使用 systemd 控制系统资源的使用。您应该只在特殊情况下手动配置 cgroups 虚拟文件系统。例如,当您需要使用在 cgroup-v2 层次结构中没有对应的 cgroup-v1 控制器时。

先决条件

  • 您有 root 权限。

流程

  1. 通过 systemd 系统和服务管理器系统,在系统引导期间将系统配置为默认挂载 cgroups-v2

    # grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=1"
    Copy to Clipboard Toggle word wrap

    这会向当前引导条目中添加必要的内核命令行参数。

    向所有内核引导条目中添加 systemd.unified_cgroup_hierarchy=1 参数:

    # grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
    Copy to Clipboard Toggle word wrap
  2. 重启系统以使更改生效。

验证

  1. 验证 cgroups-v2 文件系统是否已挂载:

    # mount -l | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,seclabel,nsdelegate)
    Copy to Clipboard Toggle word wrap

    cgroups-v2 文件系统已成功挂载到 /sys/fs/cgroup/ 目录。

  2. 检查 /sys/fs/cgroup/ 目录的内容:

    # ll /sys/fs/cgroup/
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 cgroup.controllers
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 cgroup.max.depth
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 cgroup.max.descendants
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 cgroup.procs
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 cgroup.stat
    -rw-r—​r--.  1 root root 0 Apr 29 12:18 cgroup.subtree_control
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 cgroup.threads
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 cpu.pressure
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 cpuset.cpus.effective
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 cpuset.mems.effective
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 cpu.stat
    drwxr-xr-x.  2 root root 0 Apr 29 12:03 init.scope
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 io.pressure
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 io.stat
    -rw-r—​r--.  1 root root 0 Apr 29 12:03 memory.pressure
    -r—​r—​r--.  1 root root 0 Apr 29 12:03 memory.stat
    drwxr-xr-x. 69 root root 0 Apr 29 12:03 system.slice
    drwxr-xr-x.  3 root root 0 Apr 29 12:18 user.slice
    Copy to Clipboard Toggle word wrap

    默认情况下,/sys/fs/cgroup/ 目录也称为 root 控制组,提供接口文件(通过 cgroup启动)和特定于控制器的文件,如 cpuset.cpus.effective。此外,还有一些与 systemd 相关的目录,如 /sys/fs/cgroup/init.scope/sys/fs/cgroup/system.slice/sys/fs/cgroup/user.slice

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat