|
9 | 9 | # Date: 2017-06-06 |
10 | 10 | # Modified: Nic Scott - re-work to be java version agnostic |
11 | 11 |
|
| 12 | +# Date: 2018-08-30 |
| 13 | +# Modified: Juan Moreno Martinez - Change MAX HEAP instead Current HEAP and fix bug java agnostic |
| 14 | + |
12 | 15 | # depends on jps and jstat in openjdk-devel in openjdk-<VERSION>-jdk and |
13 | 16 | # openjdk-<VERSION>-jre packages being installed |
14 | 17 | # http://openjdk.java.net/install/ |
15 | 18 |
|
16 | 19 | # Also make sure the user "sensu" can sudo jps and jstat without password |
17 | 20 |
|
18 | | -while getopts 'w:c:n:o:j:hp' OPT; do |
| 21 | +while getopts 'w:c:n:o:j:l:hp' OPT; do |
19 | 22 | case $OPT in |
20 | 23 | w) WARN=$OPTARG;; |
21 | 24 | c) CRIT=$OPTARG;; |
22 | 25 | n) NAME=$OPTARG;; |
23 | 26 | o) OPTIONS=$OPTARG;; |
24 | 27 | j) JAVA_BIN=$OPTARG;; |
| 28 | + l) HEAP_MAX=$OPTARG;; |
25 | 29 | h) hlp="yes";; |
26 | 30 | p) perform="yes";; |
27 | 31 | *) unknown="yes";; |
|
30 | 34 |
|
31 | 35 | # usage |
32 | 36 | 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 ] |
34 | 38 | -n --> Name of JVM process < value |
35 | 39 | -w --> Warning Percentage < value |
36 | 40 | -c --> Critical Percentage < value |
37 | 41 | -o --> options to pass to jps |
38 | 42 | -j --> path to java bin dir (include trailing /) |
39 | 43 | -p --> print out performance data |
40 | 44 | -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 | +---------- |
41 | 55 | " |
42 | 56 |
|
43 | 57 | if [ "$hlp" = "yes" ]; then |
|
62 | 76 | JSTAT=$(sudo ${JAVA_BIN}jstat -gc $PID | tail -n 1) |
63 | 77 |
|
64 | 78 | # 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 |
66 | 80 | # Metaspace is not a part of heap in Java 8 |
67 | 81 | #Get heap capacity of JVM |
68 | 82 | TotalHeap=$(echo $JSTAT | awk '{ print ($1 + $2 + $5 + $7) / 1024 }') |
|
76 | 90 | UsedHeap=$(echo $JSTAT | awk '{ print ($3 + $4 + $6 + $8 + $10) / 1024 }') |
77 | 91 | fi |
78 | 92 |
|
| 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 | + |
79 | 101 | #Get heap usage percentage |
80 | 102 | HeapPer=$(echo "scale=3; $UsedHeap / $TotalHeap * 100" | bc -l| cut -d "." -f1) |
81 | 103 |
|
|
0 commit comments