Limiting process resource usage in AL2023 using cgroups
While it is recommended to use Resource control with systemd,
this section covers basic usage of the base
libcgroup-tools
utilities to limit CPU and memory
usage of processes. Both methods are alternatives to using
the cpulimit
utility, previously found in
EPEL.
The example below covers running the stress-ng
stress test (from the stress-ng
package) while
limiting its CPU and memory usage using utilities from the
libcgroup-tools
package, and the tunables in
sysfs
.
Use libcgroup-tools
on the command line to limit resource usage
-
Install the
libcgroup-tools
package.[ec2-user ~]$
sudo dnf install
libcgroup-tools
-
Create a
cgroup
with thememory
andcpu
controllers, and give it a name (our-example-limits
). Using the-a
and-t
options to allow theec2-user
user to control the tunables of thecgroup
[ec2-user ~]$
sudo cgcreate -a
ec2-user
-tec2-user
-g memory,cpu:our-example-limits
There is now a
/sys/fs/cgroup/our-example-limits/
directory that contains files that can be used to control each tunable.Note
Amazon Linux 2 uses
cgroup-v1
rathercgroup-v2
which is used on AL2023. On AL2, thesysfs
paths are different, and there will be/sys/fs/cgroup/memory/our-example-limits
and/sys/fs/cgroup/cpu/our-example-limits
directories owned byec2-user
which contain files that can be used to control the limits of thecgroup
. -
Limit memory usage of all processes in our
cgroup
to 100 million bytes.[ec2-user ~]$
echo
100000000
> /sys/fs/cgroup/our-example-limits
/memory.maxNote
Amazon Linux 2 uses
cgroup-v1
rather than thecgroup-v2
that Amazon Linux 2023 uses. This means that some tunables are different. To limit memory usage on AL2, the below tunable is used instead.[ec2-user ~]$
echo
10000000
> /sys/fs/cgroup/memory/our-example-limits
/memory.limit_in_bytes -
Limit CPU usage of all processes in our
cgroup
to 10%. The format of thecpu.max
file is$MAX $PERIOD
, limiting the group to consuming$MAX
for every$PERIOD
.[ec2-user ~]$
echo
10000 100000
> /sys/fs/cgroup/our-example-limits
/cpu.maxAmazon Linux 2 uses
cgroup-v1
rather than thecgroup-v2
that Amazon Linux 2023 uses. This means that some tunables are different, including how to limit CPU usage. -
The below example runs
stress-ng
(which can be installed by runningdnf install -y stress-ng
) in theour-example-limits
cgroup. While thestress-ng
command is running, you can observe usingtop
that it is limited to 10% of CPU time.[ec2-user ~]$
sudo cgexec -g memory,cpu:our-example-limits
stress-ng --cpu 1
-
Clean up by removing the cgroup
[ec2-user ~]$
sudo cgdelete -g memory,cpu:
our-example-limits
The
Linux Kernel documentation for cgroup-v2