Script to capture top 10 CPU usage
#!/bin/ksh ################################################################################################# # Program: cpu_utilization.ksh # # Author: Panchamoorthy Marimuthu # # Purpose: (1) To capture top 10 CPU usage when idle percentage less or equal to 30 # # along with process proctree information # # Called By: Cron # # Calls: N/A # # Parameters: # ################################################################################################# # Redirection of vmstat and cpu top 10 process information to a file in /tmp directory vmstat 2 2 >/tmp/vmstat_util ps aux | sort -rn +2 | head > /tmp/top_cpu_util tail -1 /tmp/vmstat_util > /tmp/vmstat_out # Create a directory if does not exist if [ ! -d "$DIRECTORY" ]; then mkdir -p /work/cpu fi # Variables Deceleration dt=`date +%F` HOUR_MIN_SEC=`/usr/bin/date +%T` SERVER_NAME=`/usr/bin/uname -n` SERVER_DAYS=`uptime |awk '{print $3,$4}' |awk -F "," '{print $1}'` DIRECTORY=/work/cpu FILE_VMSTAT=$DIRECTORY/$SERVER_NAME-vmstat-$dt FILE_CPU=$DIRECTORY/$SERVER_NAME-CPU-$dt header="%-8s %2s %2s %5s %7s %5s %4s %4s %3s %3s %3s %4s %4s %5s %5s %5s %5s %5s %5s %5s\n" vmstat_value="%-8s %2s %2s %5s %7s %3s %4s %4s %3s %3s %3s %4s %4s %5s %5s %5s %5s %5s %5s %5s\n" # Print header information if [ ! -e "$FILE_VMSTAT" ]; then printf "$header" "TIMING" "r" "b" "avm" "fre" "re" "pi" "po" "fr" "sr" "cy" "in" "sy" "cs" "us" "sy" "id" "wa" "pc" "ec" >$FILE_VMSTAT fi cpu_idle=`awk '{print $16}' /tmp/vmstat_out` vmstat_lcpu=`awk -F ' ' 'FNR == 2 {print $3}' /tmp/vmstat_util | cut -d '=' -f2` read vmstat_r vmstat_b vmstat_avm vmstat_fre vmstat_re vmstat_pi vmstat_po vmstat_fr vmstat_sr vmstat_cy vmstat_in vmstat_sy vmstat_cs vmstat_us vmstat_sy vmstat_id vmstat_wa vmstat_pc vmstat_ec < /tmp/vmstat_out # Print vmstat variable along with timestamp printf "$vmstat_value" $HOUR_MIN_SEC $vmstat_r $vmstat_b $vmstat_avm $vmstat_fre $vmstat_re $vmstat_pi $vmstat_po $vmstat_fr $vmstat_sr $vmstat_cy $vmstat_in $vmstat_sy $vmstat_cs $vmstat_us $vmstat_sy $vmstat_id $vmstat_wa $vmstat_pc $vmstat_ec >> $FILE_VMSTAT # Condition to check CPU idle threshold level and then print detailed CPU information if [ "$cpu_idle" -le 99 ]; then echo SERVER NAME: $SERVER_NAME >> $FILE_CPU echo SERVER UPTIME: $SERVER_DAYS >> $FILE_CPU echo LOGICAL PROCESSORS: $vmstat_lcpu >> $FILE_CPU echo RUN QUEUE: $vmstat_r >> $FILE_CPU echo BLOCK QUEUE: $vmstat_b >> $FILE_CPU echo USER: $vmstat_us >> $FILE_CPU echo SYSTEM: $vmstat_sy >> $FILE_CPU echo IDLE: $vmstat_id >> $FILE_CPU echo WAIT IO: $vmstat_wa >> $FILE_CPU echo ENTITLED CAPACITY: $vmstat_ec >> $FILE_CPU echo TIMESTAMP: $HOUR_MIN_SEC >> $FILE_CPU echo "---------------------------------------------------------------------------------------------------------" >> $FILE_CPU ps aux | head -1 >> $FILE_CPU cat /tmp/top_cpu_util >> $FILE_CPU echo "\n" >> $FILE_CPU awk '!/wait/ {print $2}' /tmp/top_cpu_util | while read x; do proctree $x; echo " "; done >> $FILE_CPU echo "\n" >> $FILE_CPU fi echo "=================================================================================================================" >> $FILE_CPU # Removal of temporary files created under /tmp directory rm /tmp/vmstat_util rm /tmp/vmstat_out rm /tmp/top_cpu_util #Log rotation for every 90 days find $DIRECTORY -type f -mtime +90 -print -exec rm -f {} \;