From 38d9e89d30270db0c86ef7c10763c9817ca6d59a Mon Sep 17 00:00:00 2001 From: Kosuke Uchida Date: Wed, 29 Nov 2006 13:01:51 +0100 Subject: [PATCH] Initial version --- plugins/other/jstat__gccount | 218 +++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100755 plugins/other/jstat__gccount diff --git a/plugins/other/jstat__gccount b/plugins/other/jstat__gccount new file mode 100755 index 00000000..41f8c255 --- /dev/null +++ b/plugins/other/jstat__gccount @@ -0,0 +1,218 @@ +#!/bin/bash +# +# Plugin for monitor JVM activity - GC Count - +# +# Usage: +# +# Symlink into /etc/munin/plugins/ and add the monitored +# alias name like : +# +# ln -s /usr/share/munin/plugins/jstat__gccount \ +# /etc/munin/plugins/jstat__gccount +# This should, however, be given through autoconf and suggest. +# +# Requirements: +# +# You need to execute your Java program under jsvc provided by +# http://jakarta.apache.org/commons/daemon/ +# which enables you to run your Java program with specified +# pid file with -pidfile option. +# A Brief setup documentation is also available at +# http://tomcat.apache.org/tomcat-5.5-doc/setup.html +# +# Target: +# +# Target Java Virtual Machine to monitor are: +# Sun JDK 5.0 (http://java.sun.com/javase/) (default) +# BEA JRockit 5.0 (http://dev2dev.bea.com/jrockit/) +# +# Parameters: +# +# config (required) +# +# Config variables: +# +# pidfilepath - Which file path use. Defaults to '/var/run/jsvc.pid' +# javahome - Defaults to '/usr/local/java/jdk' +# +DefaultPidFile="/var/run/jsvc.pid" +DefaultJavaHome="/usr/local/java/jdk" + +# +# Environment Variables +# +if [ -z "${pidfilepath}" ]; then + pidfilepath="${DefaultPidFile}" +fi + +if [ -z "${graphtitle}" ]; then + graphtitle="${pidfilepath}" +fi + +if [ -z "${javahome}" ]; then + JAVA_HOME="${DefaultJavaHome}" +else + JAVA_HOME="${javahome}" +fi +export JAVA_HOME + +# +# Functions +# +chk_jdk() +{ + isJRockit=`${JAVA_HOME}/bin/java -version 2>&1 | egrep -i 'jrockit'` + if [ -n "${isJRockit}" ]; then + JDK_TYPE="bea" + else + JDK_TYPE="sun" + fi +} + +chk_version() +{ + Version=`${JAVA_HOME}/bin/java -version 2>&1 | egrep '^java version' | awk '{print $3}' | sed -e 's/\"//g' | cut -d'_' -f 1` + if [ "${Version}" != "1.5.0" ]; then + return 1 + else + return 0 + fi +} + +config_common() +{ + echo 'graph_title GC Count' $graphtitle + echo 'graph_args -l 0' + echo 'graph_vlabel GC Count(times)' + echo 'graph_total total' + echo 'graph_info GC Count' + echo 'graph_category JVM' +} + +config_sun_jdk() +{ + config_common + + echo 'Young_GC.label Young_GC' + echo 'Young_GC.min 0' + echo 'Full_GC.label Full_GC' + echo 'Full_GC.min 0' + +} + +config_bea_jdk() +{ + config_common + + echo 'Young_GC.label Young_GC' + echo 'Young_GC.min 0' + echo 'Old_GC.label Old_GC' + echo 'Old_GC.min 0' +} + +print_sun_stats() +{ +${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \ +'{\ + S0C = $1; \ + S1C = $2; \ + S0U = $3; \ + S1U = $4; \ + EC = $5; \ + EU = $6; \ + OC = $7; \ + OU = $8; \ + PC = $9; \ + PU = $10; \ + YGC = $11; \ + YGCT = $12; \ + FGC = $13; \ + FGCT = $14; \ + GCT = $15; \ + \ + S0F = S0C - S0U; \ + S1F = S1C - S1U; \ + EF = EC - EU; \ + OF = OC - OU; \ + PF = PC - PU; \ + \ + print "Young_GC.value " YGC; \ + print "Full_GC.value " FGC; \ +}' +} + +print_bea_stats() +{ +${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \ +'{\ + HeapSize = $1; \ + NurserySize = $2; \ + UsedHeapSize = $3; \ + YC = $4; \ + OC = $5; \ + YCTime = $6; \ + OCTime = $7; \ + GCTime = $8; \ + YCPauseTime = $9; \ + OCPauseTime = $10; \ + PauseTime = $11; \ + Finalizers = $12; \ + \ + print "Young_GC.value " YC; \ + print "Old_GC.value " OC;\ +}' +} + +# +# common for all argument +# +chk_jdk + +# +# autoconf +# +if [ "$1" = "autoconf" ]; then + + if [ ! -x "${JAVA_HOME}/bin/jstat" ]; then + echo "no (No jstat found in ${JAVA_HOME}/bin)" + exit 1 + fi + + chk_version + if [ $? != 0 ]; then + echo "no (Java version is invalid)" + exit 1 + fi + + if [ ! -f "${pidfilepath}" -o ! -r "${pidfilepath}" ]; then + echo "no (No such file ${pidfilepath} or cannot read ${pidfilepath}" + exit 1 + fi + + echo "yes" + exit 0 +fi + + +# +# config +# +if [ "$1" = "config" ]; then + if [ "${JDK_TYPE}" == "bea" ]; then + config_bea_jdk + else + config_sun_jdk + fi + exit 0 +fi + +# +# Main +# +PidNum=`cat ${pidfilepath}` + +if [ "${JDK_TYPE}" == "bea" ]; then + print_bea_stats +else + print_sun_stats +fi