#!/bin/sh ##### Created by Pawan ##### ##### Vesion 1.4 ##### # Usage helper for this script function usage() { local prog="${1:-check_jstat.sh}" echo "Usage: $prog -v"; echo " Print version and exit" echo "Usage: $prog -h"; echo " Print this help nd exit" echo "Usage: $prog -p [-w <%ratio>] [-c <%ratio>]"; echo "Usage: $prog -s [-w <%ratio>] [-c <%ratio>]"; echo "Usage: $prog -j [-w <%ratio>] [-c <%ratio>]"; echo " -p the PID of process to monitor" echo " -s the service name of process to monitor" echo " -j the java app (see jps) process to monitor" echo " if this name in blank (-j '') any java app is" echo " looked for (as long there is only one)" echo " -w <%> the warning threshold ratio current/max in %" echo " -c <%> the critical threshold ratio current/max in %" } #VERSION='1.2' service='' pid='' ws=-1 cs=-1 use_jps=0 while getopts hvp:s:j:w:c: opt ; do case ${opt} in v) echo "$0 version $VERSION" exit 0 ;; h) usage $0 exit 3 ;; p) pid="${OPTARG}" ;; s) service="${OPTARG}" ;; j) java_name="${OPTARG}" use_jps=1 ;; w) ws="${OPTARG}" ;; c) cs="${OPTARG}" ;; esac done if [ -z "$pid" -a -z "$service" -a $use_jps -eq 0 ] ; then echo "One of -p, -s or -j parameter must be provided" usage $0 exit 3 fi if [ -n "$pid" -a -n "$service" ] ; then echo "Only one of -p or -s parameter must be provided" usage $0 exit 3 fi if [ -n "$pid" -a $use_jps -eq 1 ] ; then echo "Only one of -p or -j parameter must be provided" usage $0 exit 3 fi if [ -n "$service" -a $use_jps -eq 1 ] ; then echo "Only one of -s or -j parameter must be provided" usage $0 exit 3 fi if [ $use_jps -eq 1 ] ; then if [ -n "$java_name" ] ; then java=$( sudo -u user jps | grep "$java_name" 2>/dev/null) else java=$( sudo -u user jps | grep -v Jps 2>/dev/null) fi java_count=$(echo "$java" | wc -l) if [ "$java_count" != "1" ] ; then echo "UNKNOWN: No (or multiple) java app found" exit 3 fi pid=$(echo "$java" | cut -d ' ' -f 1) label=${java_name:-$(echo "$java" | cut -d ' ' -f 2)} elif [ -n "$service" ] ; then if [ ! -r /var/run/${service}.pid ] ; then echo "/var/run/${service}.pid not found" exit 3 fi pid=$(cat /var/run/${service}.pid) label=$service else label=$pid fi if [ ! -d /proc/$pid ] ; then echo "CRITICAL: process pid[$pid] not found" exit 2 fi proc_name=$(cat /proc/$pid/status | grep 'Name:' | sed -e 's/Name:[ \t]*//') if [ "$proc_name" != "java" ]; then echo "CRITICAL: process pid[$pid] Tomcat Service Not Running" exit 2 fi gc=$( sudo -u user jstat -gc $pid | tail -1 | sed -e 's/[ ][ ]*/ /g') if [ -z "$gc" ]; then echo "CRITICAL: Can't get GC statistics" exit 2 fi #echo "gc=$gc" set -- $gc eu=$(expr "${6}" : '\([0-9]\+\)') ou=$(expr "${8}" : '\([0-9]\+\)') pu=$(expr "${10}" : '\([0-9]\+\)') gccapacity=$( sudo -u user jstat -gccapacity $pid | tail -1 | sed -e 's/[ ][ ]*/ /g') if [ -z "$gccapacity" ]; then echo "CRITICAL: Can't get GC capacity" exit 2 fi #echo "gccapacity=$gccapacity" set -- $gccapacity ygcmx=$(expr "${2}" : '\([0-9]\+\)') ogcmx=$(expr "${8}" : '\([0-9]\+\)') pgcmx=$(expr "${12}" : '\([0-9]\+\)') #echo "eu=${eu}k ygcmx=${ygcmx}k" #echo "ou=${ou}k ogcmx=${ogcmx}k" #echo "pu=${pu}k pgcmx=${pgcmx}k" heap=$((($eu + $ou ) / 1024)) heapmx=$((($ygcmx + $ogcmx) / 1024)) heapratio=$((($heap * 100) / $heapmx)) permratio=$((($pu * 100) / $pgcmx)) pumb=$((($pu ) / 1024)) pgcmxmb=$((($pgcmx ) / 1024)) #echo "youg+old=${heap}k, (Max=${heapmx}k, current=${heapratio}%)" #echo "perm=${pu}k, (Max=${pgcmx}k, current=${permratio}%)" #perfdata="pid=$pid heap=$heap MB;$heapmx MB;$heapratio;$ws;$cs perm=$pumb MB;$pgcmxmb MB;$permratio;$ws;$cs" perfdata="pid=$pid heap=$heap MB;$heapmx MB; $heapratio% perm=$pumb MB;$pgcmxmb MB; $permratio%" if [ $cs -gt 0 -a $permratio -ge $cs ]; then echo "CRITICAL: Process Tomcat critical PermGen size - $perfdata" exit 2 fi if [ $cs -gt 0 -a $heapratio -ge $cs ]; then echo "CRITICAL: Process Tomcat critical Heap size - $perfdata" exit 2 fi if [ $ws -gt 0 -a $permratio -ge $ws ]; then echo "WARNING: Process Tomcat warning PermGen size - $perfdata" exit 1 fi if [ $ws -gt 0 -a $heapratio -ge $ws ]; then echo "WARNING: Process Tomcat warning Heap size - $perfdata" exit 1 fi echo "OK: Process Tomcat alive - $perfdata" exit 0 ####### Usages of command ###### command[check_tomcat]=/usr/lib64/nagios/plugins/check_tomcat -j Boot -w 80 -c 90