How to limit the CPU or memory usage of a process or service?​

Environment

  • Red Hat Enterprise Linux 7

Issue

For example:

- How to limit the usage of httpd process to 20% of the CPU and maximum 500Mb of total RAM?

Resolution

1. To limit memory to 500 Mb for httpd

  • On the fly:

​Raw​

# systemctl  set-property --runtime httpd.service  MemoryLimit=500M

  • Persistant Change:

​Raw​

# systemctl set-property httpd.service MemoryLimit=500M
# systemctl daemon reload
# systemctl restart httpd.service

2. To limit httpd to use 20% of the CPU

To limit CPU usage ​​CPUShare​​ can be used, however to achieve the exact requirement the best way would be using ​​CPUQuota​

The ​​CPUQuota​​ feature is now available from RHEL 7.2 released under ​​RHBA-2015-2092​

  • On the fly:

​Raw​

# systemctl  set-property --runtime httpd.service CPUQuota=20% MemoryLimit=500M

  • Persistent change:

​Raw​

# systemctl  set-property httpd.service CPUQuota=20% MemoryLimit=500M
# systemctl daemon reload
# systemctl restart httpd.service

3. Where can I get more details regarding each options ?

​Raw​

# man systemd.resource-control

4. Also there is a tool to monitor real-time resource usage by control groups

​Raw​

# systemd-cgtop

Using this command you can check the resource usage and confirm if the limitation has been imposed.