This perl script checks the memory usage of all perl processes running on a linux machine (descending order of memory usage).
Practice Code/Not Very Efficient
Practice Code/Not Very Efficient
#!/usr/bin/perl $result = `pidof perl`; @lines = split ' ', $result; scalar @lines or die "No perl processes running at the moment\n"; $info; $index=0; while(true){ $query = "top -b -n 1"; for($i=0;$i<20 && $index!=scalar(@lines);$index++,$i++){ $query = $query." -p".$lines[$index]; } $result = `$query`; $result =~ /.*COMMAND(.*)/ms; $result = $1; $result =~ s/^\s+//; $result =~ s/\s?\Z//; $info = $info.$result; if($index==scalar(@lines)){ last; } } @top_result = split '\n', $info; #print "No of processes : ".scalar @top_result."\n"; $max = 0; @lines2; @names; foreach $line (@top_result){ if($line =~ /\s+(\S+)\s+$/){ if($1 =~ /.*perl.*/){ $line =~ m/(\d+) /; $pid = $1; if($pid != $$){ push @lines2, $line; $name = `cat /proc/$pid/cmdline`; push @names, $name; if(length($name)>$max){$max = length($name);} } }else{ push @lines2, $line; $name = $1; push @names, $name; if(length($name)>$max){$max=length($name);} } } } printf '-'x(87+2*$max)."\n"; printf "|%-${max}s | %5s | %7s | %2s | %2s | %6s | %5s | %5s | %1s | %4s | %4s | %8s | %${max}s|\n", "Script Name", "PID", "USER", "PR", "NI", "VIRT", "RES", "SHR", "S", "%CPU", "%MEM", "TIME+", "COMMAND"; printf '-'x(87+2*$max)."\n"; $index=0; foreach $line (@lines2){ $line =~ /(\S+)\s+\S+\s+\S+\s+$/; $mem = $1; $line = $line." ".$names[$index++]; if(!defined($structure{$mem})){ $structure{$mem} = $line; }else{ $structure{$mem} = $structure{$mem}."\n".$line; } } @uze = reverse sort {$a <=> $b} keys %structure; $index=0; foreach $key(@uze){ @op = split '\n', $structure{$key}; foreach $consideration(@op){ @splitt = split ' ', $consideration; printf "|%-${max}s | %5s | %7s | %2s | %2s | %6s | %5s | %5s | %1s | %4s | %4s | %8s | %${max}s|\n", $splitt[12], $splitt[0], $splitt[1], $splitt[2], $splitt[3], $splitt[4], $splitt[5], $splitt[6], $splitt[7], $splitt[8], $splitt[9], $splitt[10], $splitt[11]; $structure{$splitt[9]} = [@$structure{$splitt[9]}, $line]; } } printf '-'x(87+2*$max)."\n";

No comments:
Post a Comment