Restrict System Resource Usage with cgroups

45 minutes
  • 3 Learning Objectives

About this Hands-on Lab

The aim of this lab is to restrict system resource usage by utilizing cgroups. You need to limit the sum total usage of resources of containers to exactly 1 CPU. You also need to limit the sum total usage of resources of containers to 50% RAM. These limitations need to be imposed by creating a cgroup.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create my_limits.slice in /etc/systemd/system/ and Set Resource Limits CPU on 50% Compute Capacity and RAM to 500M
vim /etc/systemd/system/my_limits.slice 
Description=my slice 
Before=slices.target 

[Slice]
CPUAccounting=true 
CPUQuota=50%
MemoryAccounting=true
MemoryLimit=500M
ESC 
:wq 
ENTER 

See more info at: http://man7.org/linux/man-pages/man5/systemd.resource-control.5.html

Reload the Daemon and Run Two Python Containers for Testing with –cgroup-parent=my_limits.slice Parameter
sudo systemctl daemon-reload 

This is when you will need to log into two extra terminals, so that you have three total. Two will be for interacting with two python containers, and one will be for monitoring the system resource usage.

In Terminal 1

[cloud_user@server1 ]$ sudo docker run -rm -it --cgroup-parent=my_limits.slice docker.io/python 

In Terminal 2

[cloud_user@server2 ]$ sudo docker run --rm -it --cgroup-parent=my_limits.slice docker.io/python 

In Terminal 3

[cloud_user@server3 ]$ htop
Run a Stress Test in All of the Containers

In each of the two python containers run this code:

import threading 

def test():
  while True:
    1000*1000

threading.Thread(target=test).start()
threading.Thread(target=test).start()
threading.Thread(target=test).start()
threading.Thread(target=test).start()
threading.Thread(target=test).start()

Monitor the results in Terminal 3, and you will see that the sum total resource usage of the containers will not exceed the given limits.

Additional Resources

Use the credentials provided on the hands-on lab overview page, and log in as cloud_user. Open three terminals and establish three separate sessions, using the same IP and credentials for each.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?