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.

Updated on: 2026-03-17T09:01:38+05:30

863 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements