#!/usr/bin/perl -w if ($#ARGV < 0) { $ARGV[0] = `hostname`; } open(TOP, "rsh $ARGV[0] /usr/bin/mpstat '|' /usr/ucb/wc -l ';' /usr/cs/bin/top -Sb -d1 all |"); @topresults = ; close(TOP); $numcpus = @topresults[0]-1; if ($numcpus <= 0) { printf("Total CPU usage, Load, Number CPUs: 0%% :0 :0\n\n\nOops! $ARGV[0] is dead!\n") && exit; } $_ = @topresults[1]; $topresults[1] =~ s/.*averages:([^,]*),.*/$1/; $load = $topresults[1]; shift(@topresults); shift(@topresults); shift(@topresults); shift(@topresults); shift(@topresults); shift(@topresults); shift(@topresults); shift(@topresults); pop(@topresults); $totcpu = 0; %usercpu = %usermem = %userjob = (); foreach $line (@topresults) { $_ = $line; s/^\s*//; ($pid, $username, $pri, $nice, $size, $res, $state, $time, $wcpu, $cpu, $command) = split; if ($username ne "an4m" || $command !~ /^top/) { $userjob{$username}++; $usercpu{$username} += $cpu; $totcpu += $cpu; if (chop($res) eq 'M') { $res *= 1024; }; $usermem{$username} += $res; } } printf("Total CPU usage, Load, Number CPUs: %7.2f%% :%6.2f :%d\n\n", $totcpu, $load, $numcpus); @users = sort { $usercpu{$a} < $usercpu{$b} } keys(%usercpu); printf(" User #Jobs %%CPU Memory\n"); foreach $user (@users) { if ($usercpu{$user} > 1) { $memory = $usermem{$user}; $magn = "K"; if ($memory > 1024) { $memory /= 1024; $magn = "M"; } if ($memory > 1024) { $memory /= 1024; $magn = "G"; } if ($memory > 1024) { $memory /= 1024; $magn = "T"; } printf("%10s %5d %7.2f%% %3d%s\n", $user, $userjob{$user}, $usercpu{$user}, $memory, $magn); } }