cpulimit is a simple program that attempts to limit the cpu usage of a process (expressed in percentage, not in cpu time). This is useful to control batch jobs, when you don't want they eat too much cpu.
cpulimit project 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.
· cpulimit should run on every Linux 2.2 or greater. It has been reported by several users that cpulimit works fine even on SMP hardware, but there is a little difference in the meaning of cpu usage (see below).
· If you can modify the source code of cpulimit to make it run in a non Linux OS, please notify me, so I can publish your code. I think that the only non-portable code is iterating through the process list.
Download source from here (under GPL license), extract the source and compile:
$ tar zxf cpulimit-1.0.tar.gz
$ cd cpulimit-1.0
Executable file name is cpulimit.
Examples of use:
Limiting the program 'bigloop' by executable name to 40% CPU:
$ ./cpulimit --exe bigloop --limit 40
$ ./cpulimit --path /usr/local/bin/bigloop --limit 40
Limiting a program by PID to 55% CPU:
$ ./cpulimit --pid 2960 --limit 55
Usage: cpulimit TARGET [OPTIONS...]
TARGET must be exactly one of these:
-p, --pid=N pid of the process
-e, --exe=FILE name of the executable program file
-P, --path=PATH absolute path name of the executable program file
-l, --limit=N percentage of cpu allowed from 0 to 100 (mandatory)
-v, --verbose show control statistics
-z, --lazy exit if there is no suitable target process, or if it dies
-h, --help display this help and exit
If you have just one processor you can limit the percentage from 0% to 100%, and this is fine. 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.
cpulimit should run at least with the same user running the controlled process. But it is much better if you run cpulimit as root, for precision issues.
Actually, cpulimit does not limit the children (neither processes nor threads) of the original process. I know that it is a big limitation. I'm working to add this feature, though it isn't a trivial task.
What's New in This Release: [ read full changelog ]
· CPUlimit can now handle limiting CPU usage on multi-core systems, giving the user the option to set limits above 100%.
· Error checking is now in place to avoid memory errors if CPUlimit cannot read the proc file system.