I don't want background process to eat all my CPU. I know how to find out CPU utilization but how do I limit the cpu usage of a process under Linux operating system? How do I force a process to limit itself to 25% only?
You can use cpulimit program that attempts to limit the cpu usage of a process. Limits are expressed in percentage and not in cpu time. cpulimit does not act on the nice value or other scheduling priority stuff, but on the real cpu usage. Also, it is able to adapt itself to the overall system load, dynamically and quickly.
Install cpulimit
Type the following commands to install latest stable release:
# cd /tmp
# wget 'http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz'
# tar -zxvf cpulimit-1.1.tar.gz
# cd cpulimit-1.1
# make
# cp cpulimit /usr/local/sbin/
# rm -rf cpulimit*
A note about Debian / Ubuntu Linux users
Type the following command to install cpulimit:
$ sudo apt-get update
$ sudo apt-get install cpulimit
How do I use cpulimit?
To limit CPU usage of the process called firefox to 30%, enter:
# cpulimit -e firefox -l 30
To limit CPU usage of the process to 30% by using its PID, enter:
# cpulimit -p 1313 -l 30
To find out PID of the process use any of the following:
# ps aux | less
# ps aux | grep firefox
# pgrep -u vivek php-cgi
# pgrep lighttpd
You can also use absolute path name of the executable, enter:
# cpulimit -P /opt/firefox/firebox -l 30
Where,
- -p : Process PID.
- -e : Process name.
- -l : percentage of CPU allowed from 0 to 100.
- -P: absolute path name of the executable program file.
Root vs Normal User Account
From the project webpage:
cpulimit should run at least with the same user running the controlled process. But it is much better if you run cpulimit as root, in order to have a higher priority and a more precise control.
A Note About SMP (Multicore / MultiCpu) Systems
Again quoting from the project webpage:
If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power. In any case, the percentage is the same of what you see when you run top.
Related Throttling Utilities
- ionice utility - Avoid sudden outburst of backup shell script / program disk I/O.
- Limit disk I/O for rsync tool.
- Linux nice command: Run Process With Modified Scheduling Priority ( nicenesses )
- renice command: Change the Priority of a Already Running Process
Recommended Readings:
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- My 10 UNIX Command Line Mistakes
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
- Email FAQ to a friend
- Download PDF version
- Printable version
- Comment RSS feed
- Last Updated: 12/24/09


{ 18 comments… read them below or add one }
does cpulimit runs firefox in your example, like nice?
Or can it control cpu usage of already working programs?
Firefox is already running and icpulimit going to control its cpu usage.
Would this work with uninterruptible processes (ones with a D state code)?
I quite like it, and it could come in handy. Firefox at 5% is almost usable. :-p
may you help me about this question? pls
Create a C program which starts two processes.These processes work with common memory.The first process generates 20 random integer numbers.The second process reads them and writes the odd numbers in file F1, the even numbers in file F2
thanks a lot, it’s so nice :)
hello
How i can use cpulimit for my user on the server . for example my one user can use only 5% of the cpu and other user can use the 10 % of my server cpu?
graet
Thanks, but i get an error:
Segmentation fault (core dumped)
An core dump file is created when i run cpulimit for limit apache (httpd).
My server is an Core2Quad 64 Bits…maybe cause i’m using 64 Bits?
Thanks!
I would like to limit CPU usage by command :
gzip -9 somename.gz
How to use cpulimit with it.
# cpulimit -l 30 -e gzip -1 file.gz
cpulimit: invalid option — ‘1′
Any ideas ?
regards to you all
Sorry original command was:
gzip -1 file.gz
# cpulimit -l 30 -e gzip -1 file.gz
cpulimit: invalid option — ‘1′
@Slawek
At current version of cpulimit (1.1) does *not* support programs execution directly from cpulimit.
You have two ways to do it:
- First, limit the cpu usage of gzip command and then, run gzip.
- Run gzip and then limit its cpu usage with cpulimit.
Only development version support programs execution directly.
I am trying to limit the gzip process, however, it isn’t currently running. Is there a way to make it so whenever a process runs it is limited?
@Josh
Run this “cpulimit -l -e gzip”. Leave it running, for example, in a detached screen or in background adding the character “&” at the end.
Hi,
I tried to install this and use. but i am getting “Segmentation fault (core dumped)” error.
How do I solve this?
Thanks & regards,
karunakar gowni
Thank you!
tar cpulimit-1.1.tar.gz
returned, on CentOS, “/bin/tar: Old option `g’ requires an argument.”
The following worked.
tar -xvzf cpulimit-1.1.tar.gz
@ Pugazendhi,
Thanks for the heads up, it was a typo on my part!
Hi, I am fairly new to Linux. I followed your instructions and was able to install cpulimit – Thanks! My question is: I have a scheduled backup job that starts/stops a “java” process which hammers the CPU. Is there a way to auto-limit the the CPU usage of the java process when it starts?