User Tools

Site Tools


server_stats

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
server_stats [2015/05/10 15:03] luke7858server_stats [2024/05/23 07:26] (current) – external edit 127.0.0.1
Line 3: Line 3:
 <sxh bash> <sxh bash>
 #!/bin/bash #!/bin/bash
 +#####################################
 +##Release:
 +##Version 1.3
 +##Author: Luke Shirnia
 +####################################
 +#version 1.3 release notes:
 +#added total CPU usage for top process and all its threads
 +#added server uptime from /proc/uptime 
 +#load average now pulled from /proc/loadavg rather than 'w' (for compatibility)
 +#replaced 'free -m' with values from /proc/meminfo (for compatibility)
 +#####################################
 +#Version 1.2 Update Notes:
 +#Ram usage now in MB
 +#removed 'bc' commands and replaced with awk for compatibility reasons
 ##################################### #####################################
 #####Colours###### #####Colours######
Line 9: Line 23:
 RED=$ESC_SEQ"31;01m" RED=$ESC_SEQ"31;01m"
 RESET=$ESC_SEQ"39;49;00m" RESET=$ESC_SEQ"39;49;00m"
 +BLUE=$ESC_SEQ"34;01m"
 #####Underline/bold##### #####Underline/bold#####
 BOLD=$ESC_SEQ"\033[1m" BOLD=$ESC_SEQ"\033[1m"
Line 17: Line 32:
 ##################################### #####################################
 #Load Average #Load Average
-# -o =  +loadnow=$( cut /proc/loadavg -f1 -d\ ) #this gets the 1 min load average from /proc/loadavg 
-# -h =  +load15=$( cut /proc/loadavg -f3 -d\ ) #gets the 15 min load average from /proc/loadavg
-# -e = pattern list. Specify one or more patters to be used during the search for input +
-loadnow=$(uptime | grep -ohe 'load average[s:][: ].*' | awk '{ print $3 }' | sed 's/,//'); +
-load15=$(uptime | grep -ohe 'load average[s:][: ].*' | awk '{ print $5 }');+
  
 #Ram Usage #Ram Usage
-free=$(free -m | grep -ohe '-/+ buffers/cache[: ].*' | awk '{ print $}'); +totalc=$( grep MemTotal /proc/meminfo | awk '{print $2 / 1024 }'#gets the total available ram from /proc/meminfo 
-used=$(free -m | grep -ohe '-/buffers/cache[: ].*' | awk '{ print $3 }');+usedc=$( ps -Fe --sort:-rss --no-headers | awk '{totalram += $6}END{print totalram 1024}
 +free=$( printf "%.2f\n" $( echo - | awk -v t=$totalc -v u=$usedc '{print t - u }')
 +total=$( printf "%0.2f\n" $totalc ) 
 +used=$( printf "%0.2f\n" $usedc ) 
 topramprocess=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $11}') topramprocess=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $11}')
 topramrss=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $6}') topramrss=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $6}')
  
 #CPU Stuff #CPU Stuff
-# old command topprocess=$(ps -eo user,pcpu,pid,cmd --no-headers | sort -r -k2 | head -1 | awk '{print $4}') 
 topprocess=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $4}' | sed 's/[][]//g' ) topprocess=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $4}' | sed 's/[][]//g' )
-#topcpu=$(ps -eo user,pcpu,pid,cmd --no-headers | sort -r -k2 | head -1 | awk '{print $2}') 
 topcpu=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $2}') topcpu=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $2}')
 +
 +serveruptime=$(awk '{print int($1/86400)"days "int($1%86400/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime)
 ####################################### #######################################
  
 echo $neat echo $neat
-#echo -e $bold "bold test" $RESET 
  
 #####Load Average##### #####Load Average#####
 +echo ""
 +echo "Server Uptime: "$serveruptime
 echo "" echo ""
 #1 min load check #1 min load check
-loadcheck=$(echo $loadnow '<0.80 | bc -l )+loadcheck=$(echo - | awk -v lnow=$loadnow '{print ( lnow < 0.80 )}')
     if [ "$loadcheck" -ge 1 ]; then     if [ "$loadcheck" -ge 1 ]; then
-        echo -e "Load Average: Current$GREEN "$loadnow$RESET +       echo -e "Load Average: Current$GREEN "$loadnow$RESET 
-    elif [ "$loadnow" -le 0 ]; then +    elif [ "$loadcheck" -le 0 ]; then 
-        echo -e "Load Average: Current$RED "$loadnow$RESET+       echo -e "Load Average: Current$RED "$loadnow$RESET
     fi     fi
  
 #15 min load check #15 min load check
-loadcheck15=$(echo $load15 '<0.80 | bc -l +loadcheck15test=$(echo - | awk -v l15=$load15 '{print ( l15 < 0.80 )}'
-    if [ "$loadcheck15" -ge 1 ]; then +    if [ "$loadcheck15test" -ge 1 ]; then 
-        echo -e "Load Average: 15min Average$GREEN "$loadnow$RESET +    echo -e "Load Average: 15min Average$GREEN "$loadnow$RESET 
-    elif [ "$loadcheck15" -le 0 ]; then+    elif [ "$loadcheck15test" -le 0 ]; then
         echo -e "Load Average: 15min Average$RED "$loadnow$RESET         echo -e "Load Average: 15min Average$RED "$loadnow$RESET
     fi     fi
  
 +#####RAM#####
 echo "" echo ""
 +echo ""
 +echo "###RAM usage###"
  
-#####RAM##### 
 echo -e "Free Ram: "$free"MB"  echo -e "Free Ram: "$free"MB" 
 echo "Used RAM: "$used"MB" echo "Used RAM: "$used"MB"
-#bc - the -l option will load the standard math library and default the scale to 20 +ramtest=$( printf "%.0f\n" $(echo | awk -v u=$used -v f=$free '{ print 100 - ( / ( ) ) * 100 }' )) 
-#ramtest=$( printf "%.0f\n" $(bc -l <<< "100 ($used / ( $free + $used) ) * 100 ") ) + 
-ramtest=$( printf "%.0f\n" $(bc -l <<< "100 - ($used / ( $free $used) ) * 100 ") ) + 
-#ramtest=9+echo ""
 echo $ramtest"% ram left" echo $ramtest"% ram left"
         if [ $ramtest -gt 20 ]; then         if [ $ramtest -gt 20 ]; then
Line 74: Line 93:
             echo -e "RAM WARNING:$RED CRITICAL STATE!!$RESET"             echo -e "RAM WARNING:$RED CRITICAL STATE!!$RESET"
         fi         fi
-echo ""         +echo ""  
-echo "TOP RAM CONSUMER: ""$topramprocess" +
-echo "It's RAM Usage (RSS): "$topramrss" bytes"+
  
 +topramMB=$( printf "%.2f\n" $(echo - | awk -v tp=$topramrss '{print tp / 1024}'))
 +ramtotalprocesses=$(ps -Fe --sort:-rss | grep -v grep | grep -ic $topramprocess)
 +
 +echo -e "TOP RAM CONSUMER: ""$BLUE$topramprocess$RESET"
 +echo "RAM Usage (RSS): $topramMB MB"
 +echo "Total Number of RAM Processes: $ramtotalprocesses"
 +
 +
 +totalRAMall=$( printf "%.2f" $(ps -Fe --sort:-rss --no-headers | grep -v grep | grep $topramrss | awk '{total += $6}END{print total / 1024 }'))
 +rampercentage=$( printf "%.2f\n" $( echo - | awk -v t=$total -v tra=$totalRAMall '{ print tra / t }'))
 +
 +
 +#command below checks total ram usage of top RAM consumer and ALL of its threads and compares to total RAM avaiable. If it is higher than the threshold of 70% then a warning is produced.
 +totalramcheck=$(echo - | awk -v ramp=$rampercentage '{print ( ramp < 70 )}')
 +if [ "$totalramcheck" -ge 1 ]; then
 +    echo -e "Total RAM Usage for all $BLUE$topramprocess$RESET processes = " $GREEN$totalRAMall" MB"$RESET
 +    echo -e $GREEN$rampercentage$RESET"% used by "$topramprocess
 +elif [ "$totalramcheck" -le 0 ]; then
 +    echo -e "Total RAM usage for all $BLUE$topramprocess$RESET processes = " $RED$totalRAMall" MB"$RESET
 +    echo -e $RED$rampercentage$RESET"% used by "$topramprocess
 +fi
  
 #####CPU##### #####CPU#####
 +echo ""
 echo "" echo ""
 echo "###CPU usage###" echo "###CPU usage###"
-echo -e "Top Process: " $UNDERLINE$topprocess$RESET +echo -e "Top Process: " $BLUE$topprocess$RESET
-threads=$( ps afx | grep -v grep | grep -ic "$topprocess" )+
  
- +cpuchecktest=$( echo - | awk -v topcpu=$topcpu '{print ( topcpu < 50 )}' 
-cpucheck=$(echo $topcpu '<' 0.50 | bc -l +    if [ "$cpuchecktest" -ge 1 ]; then
-    if [ "$cpucheck" -ge 1 ]; then+
         echo -e "CPU % for SINGLE Top Process = " "$GREEN$topcpu$RESET"         echo -e "CPU % for SINGLE Top Process = " "$GREEN$topcpu$RESET"
-    elif [ "$cpucheck" -le 0 ]; then+    elif [ "$cpuchecktest" -le 0 ]; then
         echo -e "CPU % for SINGLE Top Process = " "$RED$topcpu$RESET"         echo -e "CPU % for SINGLE Top Process = " "$RED$topcpu$RESET"
     fi     fi
 +     
 +threads=$( ps afx | grep -v grep | grep -ci $topprocess )
 echo -e "number of processes this is running: $UNDERLINE$threads$RESET" echo -e "number of processes this is running: $UNDERLINE$threads$RESET"
  
 +#add all of the processes up and then print the total:
 +totalcpu=$( ps aux | grep $topprocess | grep -v grep | awk '{total += $3}END{print total}' )
  
-#add all of the processes up and then print them: 
-totalcpu=$(ps aux | grep $topprocess | grep -v grep | awk '{total += $3}END{print total}') 
-#echo "cpu % for top process = " "$topcpu" 
-echo -e "cpu usage for all $UNDERLINE$topprocess$RESET processes" 
  
-totalcpucheck=$(echo $totalcpu '<' 0.7 | bc -l +totalcpuchecktest=$( echo - | awk -v totalcpu=$totalcpu '{print ( totalcpu 70 )}') 
-if [ "$totalcpucheck" -ge 1 ]; then +    if [ "$totalcpuchecktest" -ge 1 ]; then 
-    echo -e "Total CPU % for Process = " "$GREEN$totalcpu$RESET" +        echo -e "Total CPU % for $BLUE$topprocess$RESET = " "$GREEN$totalcpu$RESET" 
-elif [ "$totalcpucheck" -le 0 ]; then +    elif [ "$totalcpuchecktest" -le 0 ]; then 
-    echo -e "Total CPU % for Process = " "$RED$totalcpu$RESET" +        echo -e "Total CPU % for $BLUE$topprocess$RESET = " "$RED$totalcpu$RESET" 
-fi+    fi
  
-#echo $totalcpu 
-echo "" 
  
-#echo "$threads $threadstest"+echo ""
 echo $neat echo $neat
 ####################################### #######################################
 </sxh> </sxh>
server_stats.1431270183.txt.gz · Last modified: 2024/05/23 07:26 (external edit)

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki