| 1 | #!/usr/bin/perl |
| 2 | |
| 3 | open PROC_STAT, "</proc/stat"; |
| 4 | my @proc_stat=<PROC_STAT>; |
| 5 | close PROC_STAT; |
| 6 | my @cpu_stat_t0 = grep {s/^cpu\d+\s//} (@proc_stat); |
| 7 | sleep 1; |
| 8 | open PROC_STAT, "</proc/stat"; |
| 9 | my @proc_stat=<PROC_STAT>; |
| 10 | close PROC_STAT; |
| 11 | my @cpu_stat_t1 = grep {s/^cpu\d+\s//} (@proc_stat); |
| 12 | |
| 13 | my $total = 0; |
| 14 | for (my $cpu_i=0; $cpu_i<(scalar @cpu_stat_t0); $cpu_i++) { |
| 15 | my @stat_t0 = split /\s+/, $cpu_stat_t0[$cpu_i]; |
| 16 | my @stat_t1 = split /\s+/, $cpu_stat_t1[$cpu_i]; |
| 17 | my ($t0_idle, $t1_idle) = ($stat_t0[3], $stat_t1[3]); |
| 18 | my ($t0_total, $t1_total) = (0, 0); |
| 19 | $t0_total += $_ foreach @stat_t0; |
| 20 | $t1_total += $_ foreach @stat_t1; |
| 21 | |
| 22 | my $load = ($t1_total - $t0_total == 0) ? 100: int((100 * (($t1_total - $t0_total) - ($t1_idle - $t0_idle))/($t1_total - $t0_total)) + 0.5); |
| 23 | print " +" unless ($cpu_i == 0); |
| 24 | printf "% 5.1f%% ", $load; |
| 25 | $total += $load; |
| 26 | } |
| 27 | printf " = % 6.1f%%\n", $total; |