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.