1
- #! /bin/bash
1
+ #! /bin/sh
2
2
#
3
3
# Plugin for monitor JVM activity - GC Count -
4
4
#
22
22
#
23
23
# Target:
24
24
#
25
- # Target Java Virtual Machine to monitor are:
26
- # Sun JDK 5.0 (http://java.sun.com/javase/) (default)
27
- # BEA JRockit 5.0 (http://dev2dev.bea.com/jrockit/)
25
+ # Target Java Virtual Machine to monitor are:
26
+ # Sun JDK 5.0 (http://java.sun.com/javase/)
27
+ # Sun JDK 8.0 (http://java.sun.com/javase/)
28
+ # BEA JRockit 5.0 (http://dev2dev.bea.com/jrockit/)
28
29
#
29
30
# Parameters:
30
31
#
33
34
# Config variables:
34
35
#
35
36
# pidfilepath - Which file path use. Defaults to '/var/run/jsvc.pid'
36
- # javahome - Defaults to '/usr/local/java/jdk'
37
+ # javahome - override automatic detection of JRE directory
38
+ # graphtitle - Title of the graph (defaults to PID file location)
37
39
#
38
- DefaultPidFile=" /var/run/jsvc.pid"
39
- DefaultJavaHome=" /usr/local/java/jdk"
40
40
41
- #
42
- # Environment Variables
43
- #
44
- if [ -z " ${pidfilepath} " ]; then
45
- pidfilepath=" ${DefaultPidFile} "
46
- fi
41
+ default_java_home=/usr/lib/jvm/default-java
42
+ [ -e " $default_java_home " ] || default_java_home=/usr/local/java/jdk
47
43
48
- if [ -z " ${graphtitle} " ] ; then
49
- graphtitle=" ${ pidfilepath}"
50
- fi
44
+ pidfilepath= ${pidfilepath :-/ var / run / jsvc.pid}
45
+ graphtitle=${graphtitle :- $ pidfilepath }
46
+ JAVA_HOME= ${javahome :- $default_java_home }
51
47
52
- if [ -z " ${javahome} " ]; then
53
- JAVA_HOME=" ${DefaultJavaHome} "
54
- else
55
- JAVA_HOME=" ${javahome} "
56
- fi
57
48
export JAVA_HOME
58
49
59
- #
60
- # Functions
61
- #
62
- chk_jdk ()
63
- {
64
- isJRockit=` ${JAVA_HOME} /bin/java -version 2>&1 | egrep -i ' jrockit' `
65
- if [ -n " ${isJRockit} " ]; then
66
- JDK_TYPE=" bea"
67
- else
68
- JDK_TYPE=" sun"
69
- fi
70
- }
71
50
72
- chk_version ()
73
- {
74
- Version=` ${JAVA_HOME} /bin/java -version 2>&1 | egrep ' ^java version' | awk ' {print $3}' | sed -e ' s/\"//g' | cut -d' _' -f 1`
75
- if [ " ${Version} " != " 1.5.0" ]; then
76
- return 1
77
- else
78
- return 0
51
+ get_jdk_type () {
52
+ local version
53
+ if " ${JAVA_HOME} /bin/java" -version 2>&1 | grep -qi ' jrockit' ; then
54
+ echo " bea"
55
+ else
56
+ version=$( " ${JAVA_HOME} /bin/java" -version 2>&1 | grep ' ^java version' | awk ' {print $3}' | sed -e ' s/\"//g' | cut -d' _' -f 1)
57
+ if echo " $version " | grep -q ' ^1\.5\.' ; then
58
+ echo " sun15"
59
+ else
60
+ echo " sun"
61
+ fi
79
62
fi
80
63
}
81
64
82
- config_common ()
83
- {
84
- echo ' graph_title GC Count' $graphtitle
85
- echo ' graph_args -l 0'
86
- echo ' graph_vlabel GC Count(times)'
87
- echo ' graph_total total'
88
- echo ' graph_info GC Count'
89
- echo ' graph_category virtualization'
90
- }
91
-
92
- config_sun_jdk ()
93
- {
94
- config_common
95
-
96
- echo ' Young_GC.label Young_GC'
97
- echo ' Young_GC.min 0'
98
- echo ' Full_GC.label Full_GC'
99
- echo ' Full_GC.min 0'
100
65
66
+ print_config () {
67
+ echo " graph_title GC Count $graphtitle "
68
+ echo ' graph_args -l 0'
69
+ echo ' graph_vlabel GC Count(times)'
70
+ echo ' graph_total total'
71
+ echo ' graph_info GC Count'
72
+ echo ' graph_category virtualization'
73
+
74
+ echo ' Young_GC.label Young_GC'
75
+ echo ' Young_GC.min 0'
76
+ if [ " ${JDK_TYPE} " = " bea" ]; then
77
+ echo ' Old_GC.label Old_GC'
78
+ echo ' Old_GC.min 0'
79
+ else
80
+ echo ' Full_GC.label Full_GC'
81
+ echo ' Full_GC.min 0'
82
+ fi
101
83
}
102
84
103
- config_bea_jdk ()
104
- {
105
- config_common
106
85
107
- echo ' Young_GC.label Young_GC'
108
- echo ' Young_GC.min 0'
109
- echo ' Old_GC.label Old_GC'
110
- echo ' Old_GC.min 0'
86
+ print_stats () {
87
+ local pid_num=" $1 "
88
+ local awk_script
89
+ if [ " ${JDK_TYPE} " = " bea" ]; then
90
+ # shellcheck disable=SC2016
91
+ awk_script=' { YC = $4; OC = $5; print "Young_GC.value " YGC; print "Old_GC.value " FGC; }'
92
+ elif [ " ${JDK_TYPE} " = " sun15" ]; then
93
+ # shellcheck disable=SC2016
94
+ awk_script=' { YGC = $11; FGC = $13; print "Young_GC.value " YGC; print "Full_GC.value " FGC; }'
95
+ else
96
+ # example output of jstat for Java 1.8:
97
+ # S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
98
+ # 2048.0 2048.0 0.0 1344.0 694784.0 145013.5 1398272.0 414857.1 102400.0 96308.0 12544.0 11240.1 979 20.997 5 2.705 23.702
99
+ # shellcheck disable=SC2016
100
+ awk_script=' { YGC = $13; FGC = $15; print "Young_GC.value " YGC; print "Full_GC.value " FGC; }'
101
+ fi
102
+ " ${JAVA_HOME} /bin/jstat" -gc " $pid_num " | tail -1 | awk " $awk_script "
111
103
}
112
104
113
- print_sun_stats ()
114
- {
115
- ${JAVA_HOME} /bin/jstat -gc ${PidNum} | tail -1 | awk \
116
- ' {\
117
- S0C = $1; \
118
- S1C = $2; \
119
- S0U = $3; \
120
- S1U = $4; \
121
- EC = $5; \
122
- EU = $6; \
123
- OC = $7; \
124
- OU = $8; \
125
- PC = $9; \
126
- PU = $10; \
127
- YGC = $11; \
128
- YGCT = $12; \
129
- FGC = $13; \
130
- FGCT = $14; \
131
- GCT = $15; \
132
- \
133
- S0F = S0C - S0U; \
134
- S1F = S1C - S1U; \
135
- EF = EC - EU; \
136
- OF = OC - OU; \
137
- PF = PC - PU; \
138
- \
139
- print "Young_GC.value " YGC; \
140
- print "Full_GC.value " FGC; \
141
- }'
142
- }
143
-
144
- print_bea_stats ()
145
- {
146
- ${JAVA_HOME} /bin/jstat -gc ${PidNum} | tail -1 | awk \
147
- ' {\
148
- HeapSize = $1; \
149
- NurserySize = $2; \
150
- UsedHeapSize = $3; \
151
- YC = $4; \
152
- OC = $5; \
153
- YCTime = $6; \
154
- OCTime = $7; \
155
- GCTime = $8; \
156
- YCPauseTime = $9; \
157
- OCPauseTime = $10; \
158
- PauseTime = $11; \
159
- Finalizers = $12; \
160
- \
161
- print "Young_GC.value " YC; \
162
- print "Old_GC.value " OC;\
163
- }'
164
- }
165
-
166
- #
167
- # common for all argument
168
- #
169
- chk_jdk
170
105
171
106
#
172
107
# autoconf
@@ -178,13 +113,7 @@ if [ "$1" = "autoconf" ]; then
178
113
exit 1
179
114
fi
180
115
181
- chk_version
182
- if [ $? != 0 ]; then
183
- echo " no (Java version is invalid)"
184
- exit 1
185
- fi
186
-
187
- if [ ! -f " ${pidfilepath} " -o ! -r " ${pidfilepath} " ]; then
116
+ if [ ! -f " ${pidfilepath} " ] || [ ! -r " ${pidfilepath} " ]; then
188
117
echo " no (No such file ${pidfilepath} or cannot read ${pidfilepath} "
189
118
exit 1
190
119
fi
@@ -194,25 +123,12 @@ if [ "$1" = "autoconf" ]; then
194
123
fi
195
124
196
125
197
- #
198
- # config
199
- #
200
- if [ " $1 " = " config" ]; then
201
- if [ " ${JDK_TYPE} " == " bea" ]; then
202
- config_bea_jdk
203
- else
204
- config_sun_jdk
205
- fi
206
- exit 0
207
- fi
126
+ JDK_TYPE=$( get_jdk_type)
208
127
209
- #
210
- # Main
211
- #
212
- PidNum=` cat ${pidfilepath} `
213
128
214
- if [ " ${JDK_TYPE} " == " bea" ]; then
215
- print_bea_stats
216
- else
217
- print_sun_stats
129
+ if [ " $1 " = " config" ]; then
130
+ print_config
131
+ exit 0
218
132
fi
133
+
134
+ print_stats " $( cat " $pidfilepath " ) "
0 commit comments