I implemented my own (1 second interval) mpstat command in Perl which seems
to not have the aforementioned bug, getting CPU metrics directly from
/proc/stat. I thought I'd send it over to you in case it helps troubleshoot
the issue.
Thanks
-----Original Message-----
From: Debian BTS [mailto:[email protected]] On Behalf Of Debian Bug
Tracking System
Sent: Monday, February 20, 2012 1:03 PM
To: [email protected]
Subject: Bug#660662: Acknowledgement (sysstat: mpstat shows 0% idle
incorrectly)
Thank you for filing a new Bug report with Debian.
This is an automatically generated reply to let you know your message
has been received.
Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.
Your message has been sent to the package maintainer(s):
Robert Luberda <[email protected]>
If you wish to submit further information on this problem, please
send it to [email protected].
Please do not send mail to [email protected] unless you wish
to report a problem with the Bug-tracking system.
--
660662: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=660662
Debian Bug Tracking System
Contact [email protected] with problems
#!/usr/bin/perl
#NAME: Michael Mastrogiacomo
#DATE: 02-20-2012
print "cpu\t%idle\n";
open(STAT, "< /proc/stat") or die;
while(<STAT>)
{
if (/^cpu(\d+)/)
{
$cpu = $1;
@f = split;
$idle_before{$cpu} = $f[4];
$total_before{$cpu} = $f[1] + $f[2] + $f[3] + $f[4] + $f[5] + $f[6] +
$f[7] + $f[8] + $f[9];
}
}
close(STAT) or die;
sleep(1);
open(STAT, "< /proc/stat") or die;
while(<STAT>)
{
if (/^cpu(\d+)/)
{
$cpu = $1;
@f = split;
$idle_after{$cpu} = $f[4];
$total_after{$cpu} = $f[1] + $f[2] + $f[3] + $f[4] + $f[5] + $f[6] +
$f[7] + $f[8] + $f[9];
}
}
close(STAT) or die;
for($i=0; $i <= $cpu; $i++)
{
$total = $total_after{$i} - $total_before{$i};
$idle = $idle_after{$i} - $idle_before{$i};
if ($total == 0) #avoid division by 0 errors
{
$percent_busy = 0;
}
else
{
$percent_busy = ($total - $idle) * 100 / $total;
}
# round it down and add 1 for the percent_busy value for printing
$show_idle = 100 - int($percent_busy);
print $i . "\t" . $show_idle . "\n";
}