Linux Limit CPU Usage Per Process

by on May 23, 2009 · 34 comments· LAST UPDATED December 24, 2009

in , ,

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

  1. ionice utility - Avoid sudden outburst of backup shell script / program disk I/O.
  2. Limit disk I/O for rsync tool.
  3. Linux nice command: Run Process With Modified Scheduling Priority ( nicenesses )
  4. renice command: Change the Priority of a Already Running Process

Recommended Readings:

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 34 comments… read them below or add one }

1 sajmon May 23, 2009 at 8:21 pm

does cpulimit runs firefox in your example, like nice?

Or can it control cpu usage of already working programs?

Reply

2 nixCraft May 23, 2009 at 8:27 pm

Or can it control cpu usage of already working programs?

Firefox is already running and icpulimit going to control its cpu usage.

Reply

3 Someone May 24, 2009 at 12:02 am

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

Reply

4 absolut May 26, 2009 at 6:59 pm

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

Reply

5 nima chavoshi June 25, 2009 at 11:19 am

thanks a lot, it’s so nice :)

Reply

6 Milad July 8, 2009 at 7:55 pm

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?

Reply

7 Nazeem S July 13, 2009 at 6:59 am

graet

Reply

8 Felipe August 22, 2009 at 4:49 am

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!

Reply

9 Slawek October 7, 2009 at 10:56 am

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

Reply

10 Slawek October 7, 2009 at 11:09 am

Sorry original command was:
gzip -1 file.gz
# cpulimit -l 30 -e gzip -1 file.gz
cpulimit: invalid option — ’1′

Reply

11 J. Ruiz October 21, 2009 at 8:16 am

@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.

Reply

12 Josh October 22, 2009 at 4:14 pm

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?

Reply

13 J. Ruiz October 22, 2009 at 10:23 pm

@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.

Reply

14 karunakar November 23, 2009 at 4:53 pm

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

Reply

15 Rob June 2, 2011 at 6:00 pm

I was getting seg faults as well but using the latest svn version fixed this for me:

svn checkout https://cpulimit.svn.sourceforge.net/svnroot/cpulimit/trunk cpulimit
make
cp cpulimit /usr/local/sbin

yum install subversion if necessary.

Reply

16 O2Link December 8, 2009 at 5:42 pm

Thank you!

Reply

17 Pugazendhi Asaimuthu December 23, 2009 at 8:31 pm

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

Reply

18 sri April 23, 2014 at 10:13 am

Hello Pugazendhi,

Can you please help me figure out how to find if the CPU is capped or not in a linux system?

Sri

Reply

19 nixCraft December 24, 2009 at 5:32 am

@ Pugazendhi,

Thanks for the heads up, it was a typo on my part!

Reply

20 NixNoob March 9, 2010 at 5:32 pm

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?

Reply

21 Alex July 2, 2010 at 2:43 am

http://ubuntuforums.org/showthread.php?t=992706

Why cpulimit_daemon.sh script does not work in CentOS 5.5 (kernel 2.6.18)?
And if you run:
cpulimit-P / opt / firefox / firebox-l 30
then cpulimit works fine.

Reply

22 ultramen7 October 1, 2010 at 4:37 am

hi guys,..
can i use cpulimit to user or group ?.. means, user A can use 10 % cpu and user B can use 20 % cpu,..

thanks

Reply

23 ege October 13, 2010 at 2:15 am

Thank you very much. Saved my butt on a broken Acer Aspire 5715Z that has an abysmall overheating problem constantly triggered by Firefox. Amazingly, I haven’t even noticed any performance decrease at 30%. CPU temperature dropped to 68 degrees celcius, from unoperatable 98 degrees. Beautiful.

Reply

24 GVV September 13, 2011 at 3:07 pm

Hi !!
I dont use to post comments, but this cpulimit really made my day… It works great. !!
Thank you guys

Reply

25 Rohit December 31, 2011 at 8:26 am

root@uss [/home]# cpulimit -P /home/vivek -l 20
Warning: no target process found. Waiting for it…

And it’s taking time.. How do I block vivek? :(

Reply

26 Majes April 14, 2012 at 1:05 pm

Excellent job, does what it is meant to do flawlessly.

Highly recommend this for any resource hogs ya might need to run.

Thanks!!!!

Reply

27 Angelo June 24, 2012 at 12:45 pm

Hi,
I’m the author of cpulimit. It now supports FreeBSD and will support Mac OS soon.
Latest code is available in the new github project:

https://github.com/opsengine/cpulimit

Stay tuned!

Reply

28 Deryck September 10, 2012 at 3:31 am

Hi, I have a VPS runing php-cgi process per user. Can I limit all the php-cgi process (currents and news) using cpulimit? How can I do that?

Thanks in advance.

Reply

29 Mahesh September 25, 2012 at 6:56 am

Inspite of installing subversion when changing the cpu usage value to pid showing segmentation failed

Reply

30 SAM April 12, 2013 at 9:29 am

I RUN command TOP and always first 2-4 process are php-cgi
their pid always change. hence i don’t think it gonna work much.
i did applied it at kloxo and 1 tcpserver and haven’t seen much of the difference.

do i need to regularly apply this command or just once and done?

Reply

31 Jake July 24, 2013 at 10:06 am

How to unlimit all limited processes without shutting down the linux server?

Reply

32 Jake January 26, 2014 at 1:39 pm

Hey there,

I loved using cpulimit on my linux box. However I then moved on to a mac and although the author of the script has given support for the mac the “-e” along with process name does not work.

This requires me to always have to find out the process id using “top” and then add it to my .command shortcut. The details of my issue are posted on the github where the author posted his script. https://github.com/opsengine/cpulimit/issues/29

I can understand that it would be a while before I get a reply, I saw that this issue had been posted earlier.

I know your post is on how to use cpulimit for linux. I was wondering if your an expert at scripts if it would be possible to write a small script to find out the pid of a process in mac and then use that pid in the command line to execute cpulimit.

I tried searching http://stackoverflow.com/questions/9415740/how-to-get-process-id-from-process-name and could not find how I could do this.

Pl. help, I just use cpulimit for HandBrake and nothing else.

Thanks,
Jake.

Reply

33 Nix Craft January 26, 2014 at 4:27 pm

Use pgrep command to get PID:

pgrem "firefox"
pgrep "HandBrake"

Reply

34 eoeoe May 26, 2014 at 9:40 pm

how to remove limit for all process limited with cpulimit on centos ?
sorry for my bag english :(

Reply

Leave a Comment

Tagged as: , , , , , , , ,

Previous Faq:

Next Faq: