#!/usr/bin/perl my $cmd_httpd="ps ax -O vsz,rss | grep httpd | grep -v grep"; my $cmd_cpu="grep cpu0 /proc/stat"; print "Time | Num proc | Total VSZ | Total RSS | CPU(usr) | CPU(sys) | CPU(idl) | CPU(wai)\n"; my $sleeptime=5; my $cpu_prev=[]; do { my $localsleep=$sleeptime; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); # httpd stats my @out=`$cmd_httpd`; my $num_proc=scalar @out; my $vsz=0; my $rss=0; foreach (@out) { if (/^\s*(\d+)\s+(\d+)\s+(\d+)\s+/) { $vsz+=$2; $rss+=$3; } } #CPU stats my $cpu=[]; my $out2=`$cmd_cpu`; if ($out2=~/^cpu0\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+/) { my $i; foreach $i (1..8) { $cpu->[$i]=$$i } } if (scalar @$cpu_prev gt 0) { my $cpustats=&get_cpu_stats($cpu,$cpu_prev); print "$hour:$min:$sec $num_proc $vsz $rss $cpustats->[0] $cpustats->[1] $cpustats->[2] $cpustats->[3]\n"; }else{ $localsleep=1; } $cpu_prev=$cpu; sleep $localsleep; } while(1); sub get_cpu_stats { my ($cpu,$cpu_prev)=@_; my ($usr,$sys,$idl,$wai) = (0,0,0,0); my ($pusr,$psys,$pidl,$pwai) = (0,0,0,0); my $diff=&cpu_time_diff($cpu,$cpu_prev); my $sum=&get_cpu_sum($diff); $pusr=int(($diff->[1]/$sum)*100); $psys=int(($diff->[3]/$sum)*100); $pidl=int(($diff->[4]/$sum)*100); $pwai=int(($diff->[5]/$sum)*100); my @stats=($pusr,$psys,$pidl,$pwai); return \@stats; } sub get_cpu_sum { my $cpu=shift; my $sum=0; $sum+=$_ foreach (@$cpu); return $sum; } sub cpu_time_diff { my ($cpu,$cpu_prev)=@_; my $diff=[]; my $i=0; foreach $i (1..8) { $diff->[$i]=$cpu->[$i] - $cpu_prev->[$i]; } return $diff; } sub dump_a { my $a=shift; print "$_ " foreach(@$a); print "\n"; return; } 1;