Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
CPUTool - Limit and Control CPU Utilization of Any Process in Linux
CPU utilization is a critical factor that determines system performance. When multiple processes run simultaneously, the CPU can become overloaded, leading to slow performance or system crashes. CPUTool is a command-line utility that enables you to limit and control CPU utilization of any process in Linux by setting CPU affinity, priority, and resource allocation.
Installation of CPUTool
CPUTool is available in most Linux distribution repositories. The tool primarily uses the cpuset package for CPU control and management.
Ubuntu/Debian Installation
sudo apt-get install cpuset
CentOS/RHEL Installation
sudo yum install cpuset
Basic CPU Control Usage
The basic syntax for controlling CPU utilization involves manipulating process CPU affinity and shares
sudo cpuset -p PROCESS_ID -l CPU_LIST
Limiting CPU Usage to Specific Cores
To allocate only CPU cores 0 and 1 to process ID 1234
sudo cpuset -p 1234 -l 0,1
Using CPU Shares for Proportional Control
Linux uses CPU shares to control relative CPU time allocation. The default share value is 1024 (100% utilization). To limit a process to 50% CPU usage
echo 512 | sudo tee /sys/fs/cgroup/cpu/tasks
Advanced CPUset Management
CPUsets allow grouping processes and applying collective CPU limits. This is more efficient for managing multiple related processes.
Creating a Custom CPUset
sudo mkdir /sys/fs/cgroup/cpuset/mycpuset sudo mkdir /sys/fs/cgroup/cpu/mycpuset
Configuring CPUset Properties
# Set allowed CPU cores echo "0-3" | sudo tee /sys/fs/cgroup/cpuset/mycpuset/cpuset.cpus # Set memory nodes echo "0" | sudo tee /sys/fs/cgroup/cpuset/mycpuset/cpuset.mems # Set CPU shares (relative weight) echo "512" | sudo tee /sys/fs/cgroup/cpu/mycpuset/cpu.shares
Adding Processes to CPUset
# Add specific process echo 1234 | sudo tee /sys/fs/cgroup/cpuset/mycpuset/tasks # Add all processes from a user sudo pgrep -u username | sudo tee /sys/fs/cgroup/cpuset/mycpuset/tasks
User-Specific CPU Limits
You can restrict CPU usage for specific users without affecting system-wide performance.
| Step | Command | Description |
|---|---|---|
| 1 | sudo mkdir /sys/fs/cgroup/cpu/user_name |
Create user cpuset |
| 2 | echo "200" | sudo tee /sys/fs/cgroup/cpu/user_name/cpu.shares |
Set CPU shares |
| 3 | sudo pgrep -u user_name | sudo tee /sys/fs/cgroup/cpu/user_name/tasks |
Move user processes |
Integration with Systemd
Modern Linux systems can leverage systemd for more sophisticated CPU control through service units.
Creating a CPU-Limited Service
sudo nano /etc/systemd/system/myprocess.service
Service file content
[Unit] Description=CPU Limited Process After=multi-user.target [Service] Type=simple ExecStart=/path/to/executable CPUAccounting=true CPUShares=512 CPUQuota=50% [Install] WantedBy=multi-user.target
Activating the Service
sudo systemctl daemon-reload sudo systemctl start myprocess sudo systemctl status myprocess
Monitoring CPU Usage
To verify CPU limits are working effectively
# Check process CPU usage top -p PROCESS_ID # Monitor cpuset statistics cat /sys/fs/cgroup/cpuset/mycpuset/cpuacct.usage # View systemd service CPU stats systemctl show myprocess --property=CPUUsageNSec
Conclusion
CPUTool and Linux cgroups provide powerful mechanisms for controlling CPU utilization at the process and user level. By combining cpusets, CPU shares, and systemd integration, administrators can optimize system performance, prevent resource starvation, and maintain system stability under heavy workloads.
