# $Header: topProcs.pl 30-jan-2004.10:32:51 skumar Exp $ # # Copyright (c) 2001, 2004, Oracle Corporation. All rights reserved. # # NAME # topProcs.pl - # # DESCRIPTION # This script lists up to 20 processes including: # - the top 10 processes that consume the most CPU time in % # - the top 10 processes that has the most execution time # # MODIFIED (MM/DD/YY) # skumar 01/30/04 - sort by pcpu and then by time # skumar 01/19/04 - fix vsz values # skumar 12/23/03 - AIX version use English; use hostGenFunctions; # Format: days-hours:mins:seconds.partial_seconds sub convertTimeToSecs { my $time = shift(@_); my $secs = 0; my @t_array = split(":", $time); my $d = 0; my $h = 0; my $m = 0; my $s = 0; my $ps = 0; if (@t_array == 3) { ($h, $m, $s) = @t_array; if ($h =~ /-/) # number of days { ($d, $h) = split('-', $h); $secs = $d*24*3600; } $secs += ($h*3600); } else { ($m, $s) = @t_array; if ($s =~ /\./) # partial seconds { ($s, $ps) = split('\.', $s); $secs = $ps; } } $secs += ($m*60) + $s; return $secs; } my @processList = (); my %topPcpuS = (); my $count = 0; my $process = ''; my %pidS = (); my %pcpuS = (); my %timeS = (); my $sorted_item = ''; my %uidS = (); my %uidP = (); my $uid = ''; my @fields = (); my %SZ = (); $ENV{PATH} = "/usr/bin:/usr/sbin:/bin:/usr/local/bin"; @processList = `ps glww` or die "Failed to run ps\n"; # skip the header shift @processList; foreach $process (@processList) { if ($process ne '' && $process !~ // && $process !~ /ps glww/) { chomp($process); @fields = split (" ", $process, 15); $uidP{$fields[3]} = $fields[2]; $uidS{$fields[2]} = ''; $SZ{$fields[3]} = $fields[9]; } } @processList2 = `ps gvww` or die "Failed to run ps\n"; shift @processList; foreach $process (@processList2) { chomp($process); # skip ps process and perl process if ($process ne '' && $process !~ // && $process !~ /ps gvww/) { ($pid, $tty, $stat, $time, $pgin, $size, $res, $lim, $tsiz, $trs, $pcpu, $pmem, $comm) = split (" ", $process, 13); next if $pid == $$ || $pid == 0; # skip current perl process. # put value in array pidS $pidS{$pid}=$process; $pcpuS{$pid} = $pcpu; } } foreach $sorted_item (reverse sort {$pcpuS{$a} <=> $pcpuS{$b}} keys %pcpuS) { ($pid, $tty, $stat, $time, $pgin, $size, $res, $lim, $tsiz, $trs, $pcpu, $pmem, $comm) = split (" ", $pidS{$sorted_item}, 13); $timeS{$pid} = convertTimeToSecs($time); last if (++$count == 20); } sub sortfunc { $pcpuS{$a} <=> $pcpuS{$b} || $timeS{$a} <=> $timeS{$b}; } foreach $sorted_item (reverse sort sortfunc keys %timeS) { push @topProcS, $pidS{$sorted_item}; } foreach $uid (keys %uidS) { push @uids, $uid; } $users = `$ENV{EMDROOT}/bin/nmupm usernames @uids`; chomp($users); @usernames = split(' ', $users); foreach $uid (keys %uidS) { $uidS{$uid} = shift(@usernames); } foreach $sorted_item (@topProcS) { ($pid, $tty, $stat, $time, $pgin, $size, $res, $lim, $tsiz, $trs, $pcpu, $pmem, $comm) = split (" ", $sorted_item, 13); $time = convertTimeToSecs($time); $size += $SZ{$pid}; print "em_result=$pmem|$pcpu|$time|$size|$res|$uidS{$uidP{$pid}}|$pid|$comm\n"; }