本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 AL2023 中使用 cgroups 限制进程资源使用量
虽然推荐使用 使用 systemd 进行资源控制,但这部分介绍使用基础 libcgroup-tools 工具限制进程 CPU 和内存使用量的基本用法。这两种方法都是使用 cpulimit 工具(先前位于 EPEL 中)的替代方案。
以下示例涵盖在运行 stress-ng 压力测试(来自 stress-ng 程序包)的同时,使用 libcgroup-tools 程序包中的工具以及 sysfs 中的可调参数来限制其 CPU 和内存使用量。
在命令行使用 libcgroup-tools 限制资源使用量
-
安装
libcgroup-tools软件包。[ec2-user ~]$sudo dnf installlibcgroup-tools -
创建一个包含
memory和cpu控制器的cgroup,并为其命名 (our-example-limits)。使用-a和-t选项允许ec2-user用户控制cgroup的可调参数[ec2-user ~]$sudo cgcreate -aec2-user-tec2-user-g memory,cpu:our-example-limits现在存在一个
/sys/fs/cgroup/our-example-limits/目录,其中包含可用于控制每个可调参数的文件。注意
Amazon Linux 2 使用
cgroup-v1,而非 AL2023 使用的cgroup-v2。在 AL2 上,sysfs路径不同,并且会存在由ec2-user拥有的/sys/fs/cgroup/memory/our-example-limits和/sys/fs/cgroup/cpu/our-example-limits目录,这些目录包含可用于控制cgroup限制的文件。 -
将我们
cgroup中所有进程的内存使用量限制为 1 亿字节。[ec2-user ~]$echo100000000> /sys/fs/cgroup/our-example-limits/memory.max注意
Amazon Linux 2 使用
cgroup-v1,而非 Amazon Linux 2023 使用的cgroup-v2。这意味着某些可调参数是不同的。要在 AL2 上限制内存使用量,需改用以下可调参数。[ec2-user ~]$echo10000000> /sys/fs/cgroup/memory/our-example-limits/memory.limit_in_bytes -
将我们
cgroup中所有进程的 CPU 使用量限制为 10%。cpu.max文件的格式为$MAX $PERIOD,将组限制为每$PERIOD周期内消耗$MAX。[ec2-user ~]$echo10000 100000> /sys/fs/cgroup/our-example-limits/cpu.maxAmazon Linux 2 使用
cgroup-v1,而非 Amazon Linux 2023 使用的cgroup-v2。这意味着某些可调参数是不同的,包括限制 CPU 使用量的方式。 -
以下示例在
our-example-limitscgroup 中运行stress-ng(可通过运行dnf install -y stress-ng安装)。当stress-ng命令运行时,您可以使用top观察到其被限制在 CPU 时间的 10%。[ec2-user ~]$sudo cgexec -g memory,cpu:our-example-limitsstress-ng --cpu 1 -
通过移除 cgroup 进行清理
[ec2-user ~]$sudo cgdelete -g memory,cpu:our-example-limits
Linux 内核关于 cgroup-v2 的文档