Re: CPU limits



On Nov 7, 11:40 am, "alexxx.ma...@xxxxxxxxx" <alexxx.ma...@xxxxxxxxx>
wrote:
Inspired by the recent posting of "FAQ 8.39 How do I set CPU limits?",
I hoped to solve this problem, that I always had with computationally
intensive scripts - namely that the CPU usage goes to 100%, and a very
noisy fan starts.
I'd much prefer to be able to set my script's CPU usage at - say - 75%
or similar...

In the FAQ I saw that this possibility is in the BSD::Resource module,
but unfortunately I work in Linux.
Moreover, I'm not certain that even under BSD this could be possible:
setrlimit seems to allow you just to kill processes going beyond your
given threshold.

Any hint?

Thanks!

Alessandro Magni

you can use BSD::Resource on linux.
or try this script :

#!/usr/bin/perl
#Description: These subs allow you control how much % CPU maximum
will use your script. CPU_start() must be called once when you script
start.
#This example script will use 30% CPU until Ctrl-C pressed:

CPU_start(); CPU_max(30) while 1;

use Time::HiRes qw(time);

sub CPU_used {
(map {$_->[13]+$_->[14]}
[split " ", Cat("/proc/self/stat")])[0]
}

{ my %start = (tm => 0, cpu => 0);
sub CPU_start { @start{"tm","cpu"} = (time(),CPU_used()) }
sub CPU_max {
my ($max, $real, $cpu) = ($_[0], time()-$start{tm},
CPU_used()-$start{cpu});
return unless defined($max) and $max > 0;
&sleep( $cpu/$max-$real );
}}

#
# macro used from CPU_used() and CPU_max()
#

sub sleep { select undef,undef,undef,$_[0] }
sub Cat {
local *F;
open F, "< ".$_[0] or return;
local $/ unless wantarray;
return <F>;
}


zaher el sid***
http://www.unixshells.nl/

.