Projet

Général

Profil

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

root / plugins / java / jstat__heap @ 81db94e2

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

1
#!/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
  echo "graph_category java"
89
}
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
  
121
  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
	OU  = $8; 
141
	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