Skip to content

Commit fd5cdfb

Browse files
juan-morenomajormoses
authored andcommitted
Resolve Checks are using Current HEAP instead of Max HEAP and BUG in check agnostic JAVA Version (#28)
* Change MAX HEAP instead Current HEAP and fix bug java agnostic * Add MAX HEAP metric and fix bug java agnostic * Allow select limit to current or MAX HEAP
1 parent 01b7665 commit fd5cdfb

6 files changed

Lines changed: 89 additions & 12 deletions

bin/check-java-heap-pcnt-java8.sh

100644100755
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,50 @@
66
# Date: 2017-02-10
77
# Modified: Nikoletta Kyriakidou
88

9+
# Date: 2018-08-30
10+
# Modified: Juan Moreno Martinez - Change MAX HEAP instead Current HEAP
11+
912
# You must have openjdk-8-jdk and openjdk-8-jre packages installed
1013
# http://openjdk.java.net/install/
1114
#
1215
# Also make sure the user "sensu" can sudo without password
1316

1417
# #RED
15-
while getopts 'w:c:n:o:j:hp' OPT; do
18+
while getopts 'w:c:n:o:j:l:hp' OPT; do
1619
case $OPT in
1720
w) WARN=$OPTARG;;
1821
c) CRIT=$OPTARG;;
1922
n) NAME=$OPTARG;;
2023
o) OPTIONS=$OPTARG;;
2124
j) JAVA_BIN=$OPTARG;;
25+
l) HEAP_MAX=$OPTARG;;
2226
h) hlp="yes";;
2327
p) perform="yes";;
2428
*) unknown="yes";;
2529
esac
2630
done
2731

32+
2833
# usage
2934
HELP="
30-
usage: $0 [ -n value -w value -c value -o value -p -h ]
31-
35+
usage: $0 [ -n value -w value -c value -o value -l value -p -h ]
3236
-n --> Name of JVM process < value
3337
-w --> Warning Percentage < value
3438
-c --> Critical Percentage < value
3539
-o --> options to pass to jps
3640
-j --> path to java bin dir (include trailing /)
3741
-p --> print out performance data
3842
-h --> print this help screen
43+
-l --> limit, valid value max or current (default current)
44+
current: when -Xms and -Xmx same value
45+
max: when -Xms and -Xmx have different values
46+
47+
Requirement: User that launch script must be permisions in sudoers for jps,jstat,jmap
48+
sudoers lines suggested:
49+
----------
50+
sensu ALL=(ALL) NOPASSWD: /usr/bin/jps, /usr/bin/jstat, /usr/bin/jmap
51+
Defaults:sensu !requiretty
52+
----------
3953
"
4054

4155
if [ "$hlp" = "yes" ]; then
@@ -57,8 +71,15 @@ projectSize=$(printf "%s\n" $(printf "$PIDS" | wc -w))
5771
i=0
5872
for PID in $PIDS
5973
do
60-
#Get heap capacity of JVM
61-
TotalHeap=$(sudo ${JAVA_BIN}jstat -gccapacity $PID | tail -n 1 | awk '{ print ($4 + $5 + $6 + $10) / 1024 }')
74+
#Get heap capacity of JVM
75+
if [ "$HEAP_MAX" == "" ] || [ "$HEAP_MAX" == "current" ]; then
76+
TotalHeap=$(sudo ${JAVA_BIN}jstat -gccapacity $PID | tail -n 1 | awk '{ print ($4 + $5 + $6 + $10) / 1024 }')
77+
elif [[ "$HEAP_MAX" == "max" ]]; then
78+
TotalHeap=$(sudo ${JAVA_BIN}jmap -heap $PID 2> /dev/null | grep MaxHeapSize | tr -s " " | tail -n1 | awk '{ print $3 /1024 /1024 }')
79+
else
80+
echo "limit options must be max or current"
81+
exit 1
82+
fi
6283

6384
#Determine amount of used heap JVM is using
6485
UsedHeap=$(sudo ${JAVA_BIN}jstat -gc $PID | tail -n 1 | awk '{ print ($3 + $4 + $6 + $8) / 1024 }')

bin/check-java-heap-pcnt.sh

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,23 @@
99
# Date: 2017-06-06
1010
# Modified: Nic Scott - re-work to be java version agnostic
1111

12+
# Date: 2018-08-30
13+
# Modified: Juan Moreno Martinez - Change MAX HEAP instead Current HEAP and fix bug java agnostic
14+
1215
# depends on jps and jstat in openjdk-devel in openjdk-<VERSION>-jdk and
1316
# openjdk-<VERSION>-jre packages being installed
1417
# http://openjdk.java.net/install/
1518

1619
# Also make sure the user "sensu" can sudo jps and jstat without password
1720

18-
while getopts 'w:c:n:o:j:hp' OPT; do
21+
while getopts 'w:c:n:o:j:l:hp' OPT; do
1922
case $OPT in
2023
w) WARN=$OPTARG;;
2124
c) CRIT=$OPTARG;;
2225
n) NAME=$OPTARG;;
2326
o) OPTIONS=$OPTARG;;
2427
j) JAVA_BIN=$OPTARG;;
28+
l) HEAP_MAX=$OPTARG;;
2529
h) hlp="yes";;
2630
p) perform="yes";;
2731
*) unknown="yes";;
@@ -30,14 +34,24 @@ done
3034

3135
# usage
3236
HELP="
33-
usage: $0 [ -n value -w value -c value -o value -p -h ]
37+
usage: $0 [ -n value -w value -c value -o value -l value -p -h ]
3438
-n --> Name of JVM process < value
3539
-w --> Warning Percentage < value
3640
-c --> Critical Percentage < value
3741
-o --> options to pass to jps
3842
-j --> path to java bin dir (include trailing /)
3943
-p --> print out performance data
4044
-h --> print this help screen
45+
-l --> limit, valid value max or current (default current)
46+
current: when -Xms and -Xmx same value
47+
max: when -Xms and -Xmx have different values
48+
49+
Requirement: User that launch script must be permisions in sudoers for jps,jstat,jmap
50+
sudoers lines suggested:
51+
----------
52+
sensu ALL=(ALL) NOPASSWD: /usr/bin/jps, /usr/bin/jstat, /usr/bin/jmap
53+
Defaults:sensu !requiretty
54+
----------
4155
"
4256

4357
if [ "$hlp" = "yes" ]; then
@@ -62,7 +76,7 @@ fi
6276
JSTAT=$(sudo ${JAVA_BIN}jstat -gc $PID | tail -n 1)
6377

6478
# Java 8 jstat -gc returns 17 columns Java 7 returns 15
65-
if [[ ${#JSTAT[@]} -gt 15 ]]; then
79+
if [[ $(echo $JSTAT| wc -w) -gt 15 ]]; then
6680
# Metaspace is not a part of heap in Java 8
6781
#Get heap capacity of JVM
6882
TotalHeap=$(echo $JSTAT | awk '{ print ($1 + $2 + $5 + $7) / 1024 }')
@@ -76,6 +90,14 @@ else
7690
UsedHeap=$(echo $JSTAT | awk '{ print ($3 + $4 + $6 + $8 + $10) / 1024 }')
7791
fi
7892

93+
94+
if [[ "$HEAP_MAX" == "max" ]]; then
95+
TotalHeap=$(sudo ${JAVA_BIN}jmap -heap $PID 2> /dev/null | grep MaxHeapSize | tr -s " " | tail -n1 | awk '{ print $3 /1024 /1024 }')
96+
elif [ "$HEAP_MAX" != "" ] && [ "$HEAP_MAX" != "current" ]; then
97+
echo "limit options must be max or current"
98+
exit 3
99+
fi
100+
79101
#Get heap usage percentage
80102
HeapPer=$(echo "scale=3; $UsedHeap / $TotalHeap * 100" | bc -l| cut -d "." -f1)
81103

bin/java-heap-pcnt.sh

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@
66
# Date: 2013-9-30
77
# Modified: Mario Harvey - badmadrad.com
88

9+
# Date: 2018-08-30
10+
# Modified: Juan Moreno Martinez - Change MAX HEAP instead Current HEAP
11+
912
# You must have openjdk-7-jdk and openjdk-7-jre packages installed
1013
# http://openjdk.java.net/install/
1114

1215
# Also make sure the user "sensu" can sudo without password
1316

1417
# #RED
15-
while getopts 'w:c:n:hp' OPT; do
18+
while getopts 'w:c:n:l:hp' OPT; do
1619
case $OPT in
1720
w) WARN=$OPTARG;;
1821
c) CRIT=$OPTARG;;
1922
n) NAME=$OPTARG;;
23+
l) HEAP_MAX=$OPTARG;;
2024
h) hlp="yes";;
2125
p) perform="yes";;
2226
*) unknown="yes";;
@@ -32,6 +36,16 @@ HELP="
3236
-c --> Critical Percentage < value
3337
-p --> print out performance data
3438
-h --> print this help screen
39+
-l --> limit, valid value max or current (default current)
40+
current: when -Xms and -Xmx same value
41+
max: when -Xms and -Xmx have different values
42+
43+
Requirement: User that launch script must be permisions in sudoers for jps,jstat,jmap
44+
sudoers lines suggested:
45+
----------
46+
sensu ALL=(ALL) NOPASSWD: /usr/bin/jps, /usr/bin/jstat, /usr/bin/jmap
47+
Defaults:sensu !requiretty
48+
----------
3549
"
3650

3751
if [ "$hlp" = "yes" ]; then
@@ -53,8 +67,14 @@ if [ $COUNT != 1 ]; then
5367
fi
5468

5569
#Get heap capacity of JVM
56-
TotalHeap=$(sudo jstat -gccapacity $PID | tail -n 1 | awk '{ print ($4 + $5 + $6 + $10) / 1024 }')
57-
70+
if [ "$HEAP_MAX" == "" ] || [ "$HEAP_MAX" == "current" ]; then
71+
TotalHeap=$(sudo ${JAVA_BIN}jstat -gccapacity $PID | tail -n 1 | awk '{ print ($4 + $5 + $6 + $10) / 1024 }')
72+
elif [[ "$HEAP_MAX" == "max" ]]; then
73+
TotalHeap=$(sudo ${JAVA_BIN}jmap -heap $PID 2> /dev/null | grep MaxHeapSize | tr -s " " | tail -n1 | awk '{ print $3 /1024 /1024 }')
74+
else
75+
echo "limit options must be max or current"
76+
exit 1
77+
fi
5878
#Determine amount of used heap JVM is using
5979
UsedHeap=$(sudo jstat -gc $PID | tail -n 1 | awk '{ print ($3 + $4 + $6 + $8 + $10) / 1024 }')
6080

bin/metrics-java-heap-graphite-java8.sh

100644100755
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
# Modified: Nikoletta Kyriakidou
66

7+
# Date: 2018-08-30
8+
# Modified: Juan Moreno Martinez - Add MAX HEAP metric
9+
710
# You must have openjdk-8-jdk and openjdk-8-jre packages installed
811
# http://openjdk.java.net/install/
912

@@ -37,6 +40,9 @@ NAME=${NAME:=0}
3740
PID=$(sudo jps | grep " $NAME$" | awk '{ print $1}')
3841
for PID in $PIDS
3942
do
43+
#Get max heap capacity of JVM
44+
MaxHeap=$(sudo jmap -heap $PID 2> /dev/null | grep MaxHeapSize | tr -s " " | tail -n1 | awk '{ print $3 /1024 /1024 }')
45+
4046
#Get heap capacity of JVM
4147
TotalHeap=$(sudo jstat -gccapacity $PID | tail -n 1 | awk '{ print ($4 + $5 + $6 + $10) / 1024 }')
4248

@@ -60,6 +66,7 @@ do
6066
project=$projectName
6167
fi
6268

69+
echo "JVMs.$SCHEME.$project.Max_Heap $MaxHeap `date '+%s'`"
6370
echo "JVMs.$SCHEME.$project.Committed_Heap $TotalHeap `date '+%s'`"
6471
echo "JVMs.$SCHEME.$project.Used_Heap $UsedHeap `date '+%s'`"
6572
echo "JVMs.$SCHEME.$project.Eden_Util $ParEden `date '+%s'`"

bin/metrics-java-heap-graphite.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
# Date: 2017-06-06
88
# Modified: Nic Scott - re-work to be java version agnostic
99

10+
# Date: 2018-08-30
11+
# Modified: Juan Moreno Martinez - Add MAX HEAP metric and fix bug java agnostic
12+
1013
# depends on jps and jstat in openjdk-devel in openjdk-<VERSION>-jdk and
1114
# openjdk-<VERSION>-jre packages being installed
1215
# http://openjdk.java.net/install/
@@ -49,6 +52,9 @@ do
4952
JSTAT=$(sudo ${JAVA_BIN}jstat -gc $PID | tail -n 1)
5053

5154
# Java version indifferent memory stats
55+
#Determine MaxHeap
56+
MaxHeap=$(sudo jmap -heap $PID 2> /dev/null | grep MaxHeapSize | tr -s " " | tail -n1 | awk '{ print $3 /1024 /1024 }')
57+
5258
#Determine Old Space Utilization
5359
OldGen=$(echo $JSTAT | awk '{ print ($8) / 1024 }')
5460

@@ -60,7 +66,7 @@ do
6066

6167
# Java version-specific memory stats
6268
# Java 8 jstat -gc returns 17 columns Java 7 returns 15
63-
if [[ ${#JSTAT[@]} -gt 15 ]]; then
69+
if [[ $(echo $JSTAT| wc -w) -gt 15 ]]; then
6470
# Metaspace is NOT a part of heap in Java 8
6571
#Get heap capacity of JVM
6672
TotalHeap=$(echo $JSTAT | awk '{ print ($1 + $2 + $5 + $7) / 1024 }')
@@ -88,6 +94,7 @@ do
8894
echo "JVMs.$SCHEME.$project.Perm_Capacity $TotalPerm `date '+%s'`"
8995
echo "JVMs.$SCHEME.$project.Perm_Util $UsedPerm `date '+%s'`"
9096
fi
97+
echo "JVMs.$SCHEME.$project.Max_Heap $MaxHeap `date '+%s'`"
9198
echo "JVMs.$SCHEME.$project.Committed_Heap $TotalHeap `date '+%s'`"
9299
echo "JVMs.$SCHEME.$project.Heap_Util $UsedHeap `date '+%s'`"
93100
echo "JVMs.$SCHEME.$project.Eden_Util $ParEden `date '+%s'`"

bin/metrics-jstat-java8.py

100644100755
File mode changed.

0 commit comments

Comments
 (0)