Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com

Login

Remember Me

check_jvm

Current Version
0.5 (2014101401)
Last Release Date
2014-10-14
Compatible With
  • Nagios 3.x
  • Nagios 4.x
License
GPL
Hits
33262
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
check_jvm checks various properties of locally running JVMs and returns performance data
JvmInspector is standalone tool + Nagios wrapper plugin (check_jvm)
that dumps various properties from locally running JVMs.
This information includes:
* Heap & non-heap memory
* Running threads
* Loaded classes
* Running java version, paths & arguments
* Container server name (App servers only)
* Total active sessions (App servers only)
(tested & supported app servers are tomcat5+ and jboss4+)

JvmInspector doesn't need local or remote JMX network socket.
It directly attaches to JVM's PerfData, so it must be started with
the same USERid as the target JVM.

The latest version can be found at:
https://fidanov.net/c0d3/nagios-plugins/jvminspector/

Requirements:
* JDK 1.6+ (for JvmInspector)
* Bash 3+ (for check_jvm)

Includes:
* JvmInspector.jar - executable jar package
* check_jvm - Nagios plugin wrapper script

Example:
./check_jvm -n|--name -p|--property -w|--warning -c|--critical

Where: property is one of: "heap|non-heap|threads|classes|sessions"

More information in README file:
https://fidanov.net/c0d3/nagios-plugins/jvminspector/README
Reviews (4)
Hi,

I am using the plugin to monitor threads and sessions as below but the Nagios core server is unable to read the output. Running these check manually (as commands) on the client host is working though.

command[check_tomcat_threads]=/usr/bin/sudo -u tomcat7 /usr/local/nagios/libexec/check_jvm -n org.apache.catalina.startup.Bootstrap -p threads -w 105 -c 135
command[check_tomcat_conn]=/usr/bin/sudo -u tomcat7 /usr/local/nagios/libexec/check_jvm -n org.apache.catalina.startup.Bootstrap -p sessions -w 280 -c 360

Locally running the command:
# /usr/bin/sudo -u tomcat7 /usr/local/nagios/libexec/check_jvm -n org.apache.catalina.startup.Bootstrap -p threads -w 105 -c 135
CRITICAL 153 |threads=153;;;

Any suggestions?

Thanks.
byaurelien44230, May 4, 2017
2 of 2 people found this review helpful
Hi,

So happy to find this check.
I add -k optional parameter to check multiple JVM on the same machine :

...
Usage: $SCRIPT_NAME -n|--name -k -p|--property -w|--warning -c|--critical

Where: is one of: "heap|non-heap|threads|classes"
Hint: You can use "jps -l" or "java -jar JvmInspector.jar all" to get the java name
Example: $SCRIPT_NAME -n org.apache.catalina.startup.Bootstrap -p heap -w 1073741824 -c 2147483648

EOF
exit 0
}

[ "$#" -eq 0 ] && usage

while [ ! -z "$1" ]; do
case $1 in
-n|--name) shift; NAME="$1";;
-k|--keyword) shift; KEYWORD="$1";;
-p|--property) shift; PROPERTY="$1";;
-w|--warning) shift; WARNING="$1";;
-c|--critical) shift; CRITICAL="$1";;
-h|--help) usage;;
esac
shift
done

[ -z "$NAME" ] && p_unknown "Missing JVM app class name, use -n "
[ -z "$PROPERTY" ] && p_unknown "Missing property, use -p "
[ -z "$WARNING" ] && p_unknown "Missing warning thresholds, use -w "
[ -z "$CRITICAL" ] && p_unknown "Missing critical thresholds, use -c "

expr ${WARNING} : '[0-9]\+$' >/dev/null || p_unknown "Invalid warning threshold"
expr ${CRITICAL} : '[0-9]\+$' >/dev/null || p_unknown "Invalid critical threshold"
[ -f "$JVMINSPECTOR" ] || p_unknown "Can't find JvmInspector.jar, please install it and set JVMINSPECTOR var in this script"

if [ -z "$KEYWORD" ]; then
PSLINE="$(ps axo pid,uid,command | grep [j]ava | grep $NAME | head -1)"
else
PSLINE="$(ps axo pid,uid,command | grep [j]ava | grep $NAME | grep $KEYWORD)"
fi
...

So, now, you can use the script like this :

./check_jvm --name org.apache.catalina.startup.Bootstrap -k confluence -p heap -w 100 -c 200

./check_jvm --name org.apache.catalina.startup.Bootstrap -k jira -p heap -w 100 -c 200

Thanks a lot

Bye
byjose.a.guardia, May 31, 2016
0 of 2 people found this review helpful
Hello.

When I've JVM running as "tomcat" user, and run the script with root, I get:

UNKNOWN JVM is running with different username, run this script with UID 111

That is a problem to run with Nagios.

Thanks!
bymightaswelby, February 3, 2016
1 of 2 people found this review helpful
Awesome concept. How does this work on servers that host multiple JVMs running under the same uid? Do you need to specify the PID?
Owner's reply

You can pass "--name", if the name is unique. Use "jps -l" or "java -jar JvmInspector.jar all to get the names.

Thanks.