Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / jvm / jstat__heap @ 17f78427

Historique | Voir | Annoter | Télécharger (4,85 ko)

1 9d4c6ab7 Kosuke Uchida
#!/bin/bash
2
#
3
# Plugin for monitor JVM activity - Heap Usage -
4
#
5
# Usage:
6
#
7
#       Symlink into /etc/munin/plugins/ and add the monitored
8
#	alias name like :
9
#
10
#       ln -s /usr/share/munin/plugins/jstat__heap \
11
#	  /etc/munin/plugins/jstat_<jvm alias>_heap
12
#       This should, however, be given through autoconf and suggest.
13
#
14
# Requirements:
15
#
16
#	You need to execute your Java program under jsvc provided by
17
#	  http://jakarta.apache.org/commons/daemon/
18
#	which enables you to run your Java program with specified
19
#	pid file with -pidfile option.
20
#       A Brief setup documentation is also available at
21
#         http://tomcat.apache.org/tomcat-5.5-doc/setup.html
22
#
23
# Target:
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/)
28
#
29
# Parameters:
30
#
31
#       config   (required)
32
#
33
# Config variables:
34
#
35
#       pidfilepath  - Which file path use. Defaults to '/var/run/jsvc.pid'
36
#       javahome     - Defaults to '/usr/local/java/jdk'
37
#
38
DefaultPidFile="/var/run/jsvc.pid"
39
DefaultJavaHome="/usr/local/java/jdk"
40
41
#
42
# Environment Variables
43
#
44
if [ -z "${pidfilepath}" ]; then
45
  pidfilepath="${DefaultPidFile}"
46
fi
47
48
if [ -z "${graphtitle}" ]; then
49
  graphtitle="${pidfilepath}"
50
fi
51
52
if [ -z "${javahome}" ]; then
53
  JAVA_HOME="${DefaultJavaHome}"
54
else
55
  JAVA_HOME="${javahome}"
56
fi
57
export JAVA_HOME
58
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
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
79
  fi
80
}
81
82
config_common()
83
{
84
  echo "graph_title Heap Usage" $graphtitle
85
  echo "graph_args --base 1024 -l 0"
86
  echo "graph_vlabel Heap Usage(Bytes)"
87
  echo "graph_info Heap Usage"
88 8d9fe5bd dipohl
  echo "graph_category virtualization"
89 9d4c6ab7 Kosuke Uchida
}
90
91
config_sun_jdk()
92
{
93
  config_common
94
95
  echo "Eden_Used.label Eden_Used"
96
  echo "Eden_Free.label Eden_Free"
97
  echo "Survivor0_Used.label Survivor0_Used"
98
  echo "Survivor0_Free.label Survivor0_Free"
99
  echo "Survivor1_Used.label Survivor1_Used"
100
  echo "Survivor1_Free.label Survivor1_Free"
101
  echo "Old_Used.label Old_Used"
102
  echo "Old_Free.label Old_Free"
103
  echo "Permanent_Used.label Permanent_Used"
104
  echo "Permanent_Free.label Permanent_Free"
105
  echo "Eden_Used.draw AREA"
106
  echo "Eden_Free.draw STACK"
107
  echo "Survivor0_Used.draw STACK"
108
  echo "Survivor0_Free.draw STACK"
109
  echo "Survivor1_Used.draw STACK"
110
  echo "Survivor1_Free.draw STACK"
111
  echo "Old_Used.draw STACK"
112
  echo "Old_Free.draw STACK"
113
  echo "Permanent_Used.draw STACK"
114
  echo "Permanent_Free.draw STACK"
115
}
116
117
config_bea_jdk()
118
{
119
  config_common
120 17f78427 Lars Kruse
121 9d4c6ab7 Kosuke Uchida
  echo "NurserySize.label NurserySize"
122
  echo "HeapSize.label HeapSize"
123
  echo "UsedHeapSize.label UsedHeapSize"
124
  echo "NurserySize.draw AREA"
125
  echo "HeapSize.draw STACK"
126
  echo "UsedHeapSize.draw STACK"
127
}
128
129
print_sun_stats()
130
{
131
${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \
132
'{\
133
	S0C = $1; \
134
	S1C = $2; \
135
	S0U = $3; \
136
	S1U = $4; \
137
	EC  = $5; \
138
	EU  = $6; \
139
	OC  = $7; \
140 17f78427 Lars Kruse
	OU  = $8; \
141 9d4c6ab7 Kosuke Uchida
	PC  = $9; \
142
	PU  = $10; \
143
	\
144
	S0F = S0C - S0U; \
145
	S1F = S1C - S1U; \
146
	EF  = EC  - EU;  \
147
	OF  = OC  - OU;  \
148
	PF  = PC  - PU;  \
149
	\
150
	print "Eden_Used.value " EU * 1024; \
151
	print "Eden_Free.value " EF * 1024; \
152
	print "Survivor0_Used.value " S0U * 1024; \
153
	print "Survivor0_Free.value " S0F * 1024; \
154
	print "Survivor1_Used.value " S1U * 1024; \
155
	print "Survivor1_Free.value " S1F * 1024; \
156
	print "Old_Used.value " OU * 1024; \
157
	print "Old_Free.value " OF * 1024; \
158
	print "Permanent_Used.value " PU * 1024; \
159
	print "Permanent_Free.value " PF * 1024; \
160
}'
161
}
162
163
print_bea_stats()
164
{
165
${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \
166
'{\
167
	HeapSize = $1; \
168
	NurserySize = $2; \
169
	UsedHeapSize = $3; \
170
	YC = $4; \
171
	OC = $5; \
172
	YCTime = $6; \
173
	OCTime = $7; \
174
	GCTime = $8; \
175
	YCPauseTime = $9; \
176
	OCPauseTime = $10; \
177
	PauseTime = $11; \
178
	Finalizers = $12; \
179
	\
180
	print "NurserySize.value " NurserySize * 1024; \
181
	print "HeapSize.value " UsedHeapSize * 1024; \
182
	print "UsedHeapSize.value " UsedHeapSize * 1024; \
183
}'
184
}
185
186
#
187
# common for all argument
188
#
189
chk_jdk
190
191
#
192
# autoconf
193
#
194
if [ "$1" = "autoconf" ]; then
195
196
  if [ ! -x "${JAVA_HOME}/bin/jstat" ]; then
197
    echo "no (No jstat found in ${JAVA_HOME}/bin)"
198
    exit 1
199
  fi
200
201
  chk_version
202
  if [ $? != 0 ]; then
203
    echo "no (Java version is invalid)"
204
    exit 1
205
  fi
206
207
  if [ ! -f "${pidfilepath}" -o ! -r "${pidfilepath}" ]; then
208
    echo "no (No such file ${pidfilepath} or cannot read ${pidfilepath}"
209
    exit 1
210
  fi
211
212
  echo "yes"
213
  exit 0
214
fi
215
216
217
#
218
# config
219
#
220
if [ "$1" = "config" ]; then
221
  if [ "${JDK_TYPE}" == "bea" ]; then
222
    config_bea_jdk
223
  else
224
    config_sun_jdk
225
  fi
226
  exit 0
227
fi
228
229
#
230
# Main
231
#
232
PidNum=`cat ${pidfilepath}`
233
234
if [ "${JDK_TYPE}" == "bea" ]; then
235
  print_bea_stats
236
else
237
  print_sun_stats
238
fi