Red Hat Training

A Red Hat training course is available for Red Hat Linux

第 2 章 使用控制群组

以下部分将概述与创建、管理控制群组相关的任务。systemd 是管理 cgroup 的推荐方式并会在将来版本中被支持,此指南会着重介绍其提供的实用工具。Red Hat Enterprise Linux 的之前版本使用 libcgroup 数据包来达到相同目的。此数据包目前仍然可用,以确保后向兼容性(请参阅警告),但 Red Hat Enterprise Linux 之后的版本将不再支持其运行。

2.1. 创建控制群组

systemd 的角度来看,cgroup 会连接到一个系统单位,此单位可用单位文件进行配置、用 systemd 命令列实用工具进行管理。根据应用的类型,您的资源管理设定可以是 transient(临时的) 或者 persistent(永久的)
要为服务创建 transient cgroup(临时 cgroup),请使用 systemd-run 指令启动此服务。如此,可以限制此服务在运行时所用资源。对 systemd 进行 API 调用,应用程序可以动态创建临时 cgroup。关于如何使用 API,请参阅〈“在线文档”一节〉。服务一旦停止,临时单位就会被自动移除。
要给服务分配 persistent cgroup(永久 cgroup),请对其单位配置文件进行编写。系统重启后,此项配置会被保留,所以它可以用于管理自动启动的服务。请注意,scope 单位不能以此方式创建。

2.1.1. 用 systemd-run 创建临时 cgroup

systemd-run 指令用于创建、启动临时 servicescope 单位,并在此单位中运行自定义指令。在 service 单位中执行的指令在后台非同步启动,它们从 systemd 进程中被调用。在 scope 单位中运行的指令直接从 systemd-run 进程中启动,因此从调用方继承执行状态。此情况下的执行是同步的。
在一个指定 cgroup 中运行指令,请以 root 身份输入:
systemd-run --unit=name --scope --slice=slice_name command
  • name 代表您想要此单位被识别的名称。如果 --unit 没有被指定,单位名称会自动生成。建议选择一个描述性的名字,因为它将代表 systemctl 输出中的单位。在单位运行时期间,此名字需为独一无二的。
  • 使用可选的 --scope 参数创建临时 scope 单位来替代默认创建的 service 单位。
  • --slice 选项,让您新近创建的 servicescope 单位可以成为指定 slice 的一部分。用现存 slice(如 systemctl -t slice 输出所示)的名字替代 slice_name,或者通过传送一个独有名字来创建新 slice。默认情况下,service 和 scope 做为 system.slice 的一部分被创建。
  • 用您希望在 service 单位中运行的指令替代 command。将此指令放置于 systemd-run 句法的最末端。这样,此指令的参数就不会与 systemd-run 参数混淆。
除上述选项外,systemd-run 也有一些其它可用参数。例如,--description 可以创建对单位的描述;service 进程结束后,--remain-after-exit 可以收集运行时信息;--machine 选项可以在密闭容器中执行指令。更多信息,请参阅 systemd-run(1) manual page。

例 2.1. 用 systemd-run 来启动新 service

使用下列指令在名为 test 的新 slice 的 service 单位中运行 top 实用功能。以 root 身份输入:
~]# systemd-run --unit=toptest --slice=test top -b
如果您正确启动了 service,将显示以下信息:
Running as unit toptest.service
现在,toptest.service 名称可以与 systemctl 指令结合,以监控或修改 cgroup。

2.1.2. 创建永久 cgroup

若要在系统启动时,配置一个自动启动的单位,请执行 systemctl enable 指令(参见《Red Hat Enterprise Linux 7 系统管理员指南 · 使用 systemd 管理 service 》)。自动运行此指令会在 /usr/lib/systemd/system/ 目录中创建单位文件。如要对 cgroup 做出永久改变,请添加或修改其单位文件中的配置参数。更多信息,请参阅〈第 2.3.2 节 “修改单位文件”〉。