#!/usr/bin/sh # Script to check real memory usage # MSAT-Tools Team 01/12/2011 - V.1.0 # ------------------------------------------ # ######## Script Modifications ########## # ------------------------------------------ # Who When What # --- ---- ---- # # # USAGE="`basename $0` [-w|--warning] [-c|--critical]" THRESHOLD_USAGE="WARNING threshold must be less than CRITICAL: `basename $0` $*" critical="" warning="" STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 # print usage if [[ $# -lt 4 ]] then echo "" echo "Wrong Syntax: `basename $0` $*" echo "" echo "Usage: $USAGE" echo "" exit 0 fi # read input while [[ $# -gt 0 ]] do case "$1" in -w|--warning) shift warning=$1 ;; -c|--critical) shift critical=$1 ;; esac shift done # verify input if [[ $warning -eq $critical || $warning -gt $critical ]] then echo "" echo "$THRESHOLD_USAGE" echo "" echo "Usage: $USAGE" echo "" exit 0 fi # Total memory available totalmem=`machinfo | grep -i memory` totalmem=`echo $totalmem | awk '{print $2}'` #totalmem=`echo "$totalmem * 1024" | bc` #echo "TotalMem=$totalmem" #Total Free Memory freemem=`top -h -s 1 -d 1 -n 10` freemem=`echo $freemem | awk -F "free" '{print $1}' | awk -F "Memory:" '{print $2}' | awk -F "," '{print $3}' | awk -F "K" '{print $1}'` freemem=`echo "$freemem /1024" | bc` #echo "FreeMem=$freemem" # Total memory used usedmem=`echo "$totalmem - $freemem" | bc` #echo "UsedMem=$usedmem" #Percent Used Mem percentused=`echo "scale=5;(($usedmem / $totalmem) * 100)" | bc` #echo "PercentUsedMem=$percentused" percentfree=`echo "100 - $percentused" | bc` if [[ "$percentused" -gt $warning ]] then string="WARNING" result=1 fi if [[ "$percentused" -gt $critical ]] then string="CRITICAL" result=2 fi if [[ "$percentused" -lt $warning ]] then string="OK" result=0 fi warnlevel=`echo "scale=2;($warning * $totalmem) / 100" | bc` critlevel=`echo "scale=2;($critical * $totalmem) / 100" | bc` #echo "Warning-level=$warnlevel" #echo "Critical-level=$critlevel" # Get the top 5 Most Memory consuming processes. COMMAND=`UNIX95= ps -e -o sz,comm,pid | sort -n -r | head -5` i=0 j=0 OUTPUT=";Top 5 Memory Processes(memKB,pname,pid): " ; for word in $COMMAND; do i=`expr $i + 1` j=`expr $j + 1` if [[ $i -eq 3 ]]; then i=0; if [ $j -eq 15 ]; then OUTPUT="$OUTPUT `echo $word`" ; else OUTPUT="$OUTPUT `echo $word, `" ; fi else if [ $i%3 -eq 1 ]; then OUTPUT="$OUTPUT `echo $word"KB"`" ; else OUTPUT="$OUTPUT `echo $word `" ; fi fi done echo "$string - Memory usage: total:$totalmem MB - used:$usedmem MB($percentused%) - free:$freemem MB($percentfree%)$OUTPUT|Memory usage=${usedmem}MB;$warnlevel;$critlevel;0;$totalmem" exit $result