Solved

How can I accurately graph the average CPU usage... not just load average?

Posted on 2004-04-25
8
561 Views
Last Modified: 2012-08-13
I am writing a perl script that does some forking work, and I would like to monitor the loads of the computer running it.  The load averages are typically around 3 - 6 over 1, 5, 15 minutes, but I seek more information than that.

I already watch the CPU usage on a 10 second interval, as presented by "ps -axo %cpu", but I don't think I am getting the whole picture.

When I use "top" it shows % User, % System, % Nice, % Interrupt, % Idle, but I don't think that "ps -axo %cpu" shows anything but the % User.  How can I get a more accurate picture of how much load the system is under?

I haven't been able to find a perl module that does this.

Thank you.
0
Comment
Question by:vancetech
8 Comments
 
LVL 48

Expert Comment

by:Tintin
Comment Utility
You could try

time perlscript
0
 
LVL 20

Expert Comment

by:jmcg
Comment Utility
There are multiple meanings for the phrase "how much load the system is under". Since it sounds like you're trying to get a more comprehensive picture rather than a single "number", you might like a utility like 'vmstat' or combine it with 'iostat'.

Within your application, you can use the 'times' operator to get information similar to what is reported by the command-line utility 'time'.
0
 
LVL 3

Expert Comment

by:PerlKing
Comment Utility
I have a suggestion for you.

Once you have chosen your metric, you could very easily write a perl script that call "top" periodically, pick up the relevant information and print it in a file. Say you chose, the "memory usage". You call top every second and pick up the "memory usage" of your script. Now print all this in a file.

After you are done with the script, you could use "gnuplot" to plot a graph of this data which gives you a broader picture or the trend of memory usage by your script.

Of course, once you have such a monitoring script in place, you could make it look for multiple parameters at a time.
0
6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

 
LVL 12

Accepted Solution

by:
stefan73 earned 63 total points
Comment Utility
Hi PerlKing,
> call "top" periodically

You can simply open the output of top, like:

open(TOP,"top -b -s10 -d15 -u 0|") or die "No top";

And then just parse the output. An empty line ends a single output.

(check top man pages for the options used)


Cheers,
Stefan
0
 
LVL 3

Expert Comment

by:PerlKing
Comment Utility
Sorry I was not clear with my wordings, but that is exactly what I meant too!
Thanks for clarifying it stefan.
0
 
LVL 18

Assisted Solution

by:kandura
kandura earned 62 total points
Comment Utility
try parsing the contents of /proc/stat yourself instead of using top.
the first line will give you counters for overall cpu usage.
A sample:

cpu  3028583 89870834 2870091 9335

Then use something like:
         ($cpu[$r], $usr[$r], $nice[$r], $sys[$r], $idle[$r])= split / +/,$line;

when you take a new measurement. flip $r
         $r = 1 - $r
and convert the last two measurements to a percentage:

      $usr_100  =rate_prcnt($usr [$r],$usr [1-$r],$total[$r],$total[1-$r]);
      $nice_100 =rate_prcnt($nice[$r],$nice[1-$r],$total[$r],$total[1-$r]);
      $sys_100  =rate_prcnt($sys [$r],$sys [1-$r],$total[$r],$total[1-$r]);
      $idle_100  =rate_prcnt($idle[$r],$idle[1-$r],$total[$r],$total[1-$r]);

These four numbers give you the average cpu usage during the time between the two measurements.

sub rate_prcnt {
   my ($a1,$a2,$b1,$b2) = @_;
   if (!($a1&&$b1&&$a2&&$b2)) {
      return 0;
   }

   return (abs($b1-$b2)==0)?0:sprintf ("%.2f",100*abs($a1-$a2)/abs($b1-$b2));
}


Note that I grabbed the code for this from procallator.pl, which is a contribution to Orca, which is a systems monitoring and graphing package using RRD.
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Strange perl issue 6 122
Check file date before getting folder path 1 56
perl to convert excel to csv 3 148
PERL - Find newest folder 12 101
Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
A year or so back I was asked to have a play with MongoDB; within half an hour I had downloaded (http://www.mongodb.org/downloads),  installed and started the daemon, and had a console window open. After an hour or two of playing at the command …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now