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-toolspackage.[ec2-user ~]$sudo dnf installlibcgroup-tools -
Create a
cgroupwith thememoryandcpucontrollers, and give it a name (our-example-limits). Using the-aand-toptions to allow theec2-useruser to control the tunables of thecgroup[ec2-user ~]$sudo cgcreate -aec2-user-tec2-user-g memory,cpu:our-example-limitsThere 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-v1rathercgroup-v2which is used on AL2023. On AL2, thesysfspaths are different, and there will be/sys/fs/cgroup/memory/our-example-limitsand/sys/fs/cgroup/cpu/our-example-limitsdirectories owned byec2-userwhich contain files that can be used to control the limits of thecgroup. -
Limit memory usage of all processes in our
cgroupto 100 million bytes.[ec2-user ~]$echo100000000> /sys/fs/cgroup/our-example-limits/memory.maxNote
Amazon Linux 2 uses
cgroup-v1rather than thecgroup-v2that 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 ~]$echo10000000> /sys/fs/cgroup/memory/our-example-limits/memory.limit_in_bytes -
Limit CPU usage of all processes in our
cgroupto 10%. The format of thecpu.maxfile is$MAX $PERIOD, limiting the group to consuming$MAXfor every$PERIOD.[ec2-user ~]$echo10000 100000> /sys/fs/cgroup/our-example-limits/cpu.maxAmazon Linux 2 uses
cgroup-v1rather than thecgroup-v2that 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-limitscgroup. While thestress-ngcommand is running, you can observe usingtopthat it is limited to 10% of CPU time.[ec2-user ~]$sudo cgexec -g memory,cpu:our-example-limitsstress-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