Linux Limit CPU Usage Per Process

Posted on in Categories , , , , , , , , last updated December 24, 2009

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:

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

37 comment

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

  2. 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!

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

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

  5. 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?

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

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

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

  9. doesn’t work… and no I have no “upstart” on my box… I set cpulimit for dpkg because LA is over 20… I seen it high as 26, on a single core server…

    I ran cpulimit, it sits there looping doing nothing but blocking my tty, and I load top in other tty to see it still above 10…

    It should be 1.

Leave a Comment