JVM monitoring via jstat(1)
authorTomas Zeman <tzeman@volny.cz>
Mon, 09 May 2011 09:19:31 +0200
changeset 11 ab5293025139
parent 10 5183f2628cd2
child 12 07047572a27b
JVM monitoring via jstat(1)
scripts/jstat.1.txt
scripts/jvm-jstat-get
scripts/jvm-jstat-make
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/jstat.1.txt	Mon May 09 09:19:31 2011 +0200
@@ -0,0 +1,446 @@
+jstat(1)                                                                                            jstat(1)
+
+
+
+NAME
+       jstat - Java Virtual Machine statistics monitoring tool
+
+SYNOPSIS
+       jstat [ generalOption | outputOptions vmid [ interval [ s|ms ] [ count ] ] ]
+
+DESCRIPTION
+       The  jstat  tool  displays  performance  statistics  for an instrumented HotSpot Java virtual machine
+       (JVM). The target JVM is identified by its virtual  machine  identifier,  or  vmid  option  described
+       below.
+
+       NOTE  -  This  utility  is unsupported and may or may not be available in future versions of the J2SE
+       SDK.  It is currently not available on Windows 98 and Windows ME platforms.
+
+   VIRTUAL MACHINE IDENTIFIER
+       The syntax of the vmid string largely corresponds to the syntax of a URI:
+
+              [protocol:][//]lvmid[@hostname][:port][/servername]
+
+       protocol       The communications protocol. If the protocol is omitted and a hostname is  not  speci-
+                      fied, the  default  protocol  is a platform specific optimized local protocol. If the
+                      protocol is omitted and a hostname is specified, then the default protocol is rmi.
+
+       lvmid          The local virtual machine identifier for the target JVM. The lvmid is a  platform-spe-
+                      cific value that uniquely identifies a JVM on a system. The lvmid is the only required
+                      component of a virtual machine identifier. The lvmid is typically, but  not  necessar-
+                      ily, the operating system's process identifier for the target JVM process. You can use
+                      the jps command to determine the lvmid. Also, you can determine lvmid  on  Unix  plat-
+                      forms with the ps command, and on Windows with the Windows Task Manager.
+
+       hostname       A  hostname or IP address indicating the target host. If hostname is omitted, then the
+                      target host is the local host.
+
+       port           The default port for communicating with the remote server. If the hostname is  omitted
+                      or  the  protocol specifies an optimized, local protocol, then port is ignored. Other-
+                      wise, treatment of the port parameter is implementation specific. For the default  rmi
+                      protocol,  the  port indicates the port number for the rmiregistry on the remote host.
+                      If port is omitted, and protocol indicates rmi,  then  the  default  rmiregistry  port
+                      (1099) is used.
+
+       servername     The  treatment  of  this  parameter depends on implementation. For the optimized local
+                      protocol, this field is ignored. For the rmi protocol, it represents the name  of  the
+                      RMI remote object on the remote host.
+
+PARAMETERS
+       generalOption  A single general command-line option (-help, -options, or -version)
+
+       outputOptions  One or more output options, consisting of a single statOption, plus any of the -t, -h,
+                      and -J options.
+
+       vmid           Virtual machine identifier, a string indicating the target Java virtual machine (JVM).
+                      The general syntax is
+
+              [protocol:][//]lvmid[@hostname[:port]/servername
+
+       The  syntax  of  the vmid string largely corresponds to the syntax of a URI. The vmid can vary from a
+       simple integer representing a local JVM to a more complex construction  specifying  a  communications
+       protocol, port number, and other implementation-specific values. See Virtual Machine Identifier below
+       for details.
+
+       interval[s|ms] Sampling interval in the specified units, seconds (s) or  milliseconds  (ms).  Default
+                      units are milliseconds.  Must be a positive integer.  If specified, jstat will produce
+                      its output at each interval.
+
+       count          Number of samples to display. Default value is infinity; that is, jstat displays  sta-
+                      tistics until the target JVM terminates or the jstat command is terminated.  Must be a
+                      positive integer.
+
+OPTIONS
+       The jstat command supports two types of options, general options and output options.  General options
+       cause jstat to display simple usage and version information. Output options determine the content and
+       format of the statistical output.
+
+       NOTE- All options, and their functionality are subject to change or removal in future releases.
+
+   GENERAL OPTIONS
+       If you specify one of the general options, you cannot specify any other option or parameter.
+
+       -help          Display help message.
+
+       -version       Display version information.
+
+       -options       Display list of statistics options. See the Output Options section below.
+
+   OUTPUT OPTIONS
+       If you do not specify a general option, then you can specify output options.  Output  options  deter-
+       mine the  content  and format of jstat's output, and consist of a single statOption, plus any of the
+       other output options (-h, -t, and -J).  The statOption must come first.
+
+       Output is formatted as a table, with columns are separated by  spaces.   A  header  row  with  titles
+       describes  the  columns.   Use  the  -h option to set the frequency at which the header is displayed.
+       Column header names are generally consistent between  the  different  options.  In  general,  if  two
+       options provide a column with the same name, then the data source for the two columns are the same.
+
+       Use  the  -t  option to display a time stamp column, labeled Timestamp as the first column of output.
+       The Timestamp column contains the elapsed time, in seconds, since startup of the target JVM. The res-
+       olution of the time stamp is dependent on various factors and is subject to variation due to delayed
+       thread scheduling on heavily loaded systems.
+
+       Use the interval and count parameters to determine how frequently and how many  times,  respectively,
+       jstat displays its output.
+
+       NOTE-  You  are  advised  not to write scripts to parse jstat's output since the format may change in
+       future releases. If you choose to write scripts that parse jstat output, expect to  modify  them  for
+       future releases of this tool.
+
+       -statOption    Determines  the  statistics information that jstat displays. The following table lists
+                      the available options.  Use the -options general option to display the list of options
+                      for a particular platform installation.
+
+
+
+                     +-----------------+------------------------------------------------------+
+                     |     Option      |                     Displays...                      |
+                     +-----------------+------------------------------------------------------+
+                     |class            | Statistics on the behavior of the class loader       |
+                     |compiler         | Statistics  on  the behavior of the HotSpot Just-In- |
+                     |                 | Time compiler                                        |
+                     |gc               | Statistics on the behavior of the garbage  collected |
+                     |                 | heap                                                 |
+                     |gccapacity       | Statistics  of the capacities of the generations and |
+                     |                 | their corresponding spaces.                          |
+                     |gccause          | Summary of garbage collection  statistics  (same  as |
+                     |                 | -gcutil), with the cause of the last and current (if |
+                     |                 | applicable) garbage collection events.               |
+                     |gcnew            | Statistics of the behavior of the new generation.    |
+                     |gcnewcapacity    | Statistics of the sizes of the new  generations  and |
+                     |                 | its corresponding spaces.                            |
+                     |gcold            | Statistics  of the behavior of the old and permanent |
+                     |                 | generations.                                         |
+                     |gcoldcapacity    | Statistics of the sizes of the old generation.       |
+                     |gcpermcapacity   | Statistics of the sizes of the permanent generation. |
+                     |gcutil           | Summary of garbage collection statistics.            |
+                     |printcompilation | Summary of garbage collection statistics.            |
+                     +-----------------+------------------------------------------------------+
+       -h n           Display a column header every n samples (output rows), where n is a positive  integer.
+                      Default value is 0, which displays the column header above the first row of data.
+
+       -t n           Display  a  timestamp  column  as the first column of output. The timestamp is the the
+                      time since the start time of the target JVM.
+
+       -JjavaOption   Pass javaOption to the java application launcher.  For  example,  -J-Xms48m  sets  the
+                      startup memory to 48 megabytes. For a complete list of options, see java(1).
+
+   STATOPTIONS AND OUTPUT
+       The following tables summarize the columns that jstat outputs for each statOption.
+
+       class  Class Loader Statistics
+
+
+
+                        +---------+--------------------------------------------------------+
+                        | Column  |                      Description                       |
+                        +---------+--------------------------------------------------------+
+                        |Loaded   | Number of classes loaded                               |
+                        |Bytes    | Number of Kbytes loaded                                |
+                        |Unloaded | Number of classes unloaded                             |
+                        |Bytes    | Number of Kbytes unloaded                              |
+                        |Time     | Time spent performing class load and unload operations |
+                        +---------+--------------------------------------------------------+
+       compiler
+              HotSpot Just-In-Time Compiler Statistics
+
+
+
+                      +-------------+-------------------------------------------------------+
+                      |   Column    |                      Description                      |
+                      +-------------+-------------------------------------------------------+
+                      |Compiled     | Humber of compilation tasks performed                 |
+                      |Failed       | Number of compilation tasks that failed               |
+                      |Invalid      | Number of compilation tasks that were invalidated     |
+                      |Time         | Time spent performing compilation tasks               |
+                      |FailedType   | Compile type of the last failed compilation           |
+                      |FailedMethod | Class name and method for the last failed compilation |
+                      +-------------+-------------------------------------------------------+
+       gc     Garbage-collected heap statistics
+
+
+
+                               +-------+-------------------------------------------+
+                               |Column |                Description                |
+                               +-------+-------------------------------------------+
+                               |SOC    | Current survivor space 0 capacity (KB).   |
+                               |S1C    | Current survivor space 1 capacity (KB).   |
+                               |S0U    | Survivor space 0 utilization (KB).        |
+                               |S1U    | Survivor space 1 utilization (KB).        |
+                               |EC     | Current eden space capacity (KB).         |
+                               |EU     | Eden space utilization (KB).              |
+                               |OC     | Current old space capacity (KB).          |
+                               |OU     | Old space utilization (KB).               |
+                               |PC     | Current permanent space capacity (KB).    |
+                               |PU     | Permanent space utilization (KB).         |
+                               |YGC    | Number of young generation GC Events.     |
+                               |YGCT   | Young generation garbage collection time. |
+                               |FGC    | Number of full GC events.                 |
+                               |FGCT   | Full garbage collection time.             |
+                               |GCT    | Total garbage collection time.            |
+                               +-------+-------------------------------------------+
+       gccapacity
+              Memory Pool Generation and Space Capacities
+
+
+
+                              +-------+---------------------------------------------+
+                              |Column |                 Description                 |
+                              +-------+---------------------------------------------+
+                              |NGCMN  | Minimum new generation capacity (KB).       |
+                              |NGCMX  | Maximum new generation capacity (KB).       |
+                              |NGC    | Current new generation capacity (KB).       |
+                              |S0C    | Current survivor space 0 capacity (KB).     |
+                              |S1C    | Current survivor space 1 capacity (KB).     |
+                              |EC     | Current eden space capacity (KB).           |
+                              |OGCMN  | Minimum old generation capacity (KB).       |
+                              |OGCMX  | Maximum old generation capacity (KB).       |
+                              |OGC    | Current old generation capacity (KB).       |
+                              |OC     | Current old space capacity (KB).            |
+                              |PGCMN  | Minimum permanent generation capacity (KB). |
+                              |PGCMX  | Maximum Permanent generation capacity (KB). |
+                              |PGC    | Current Permanent generation capacity (KB). |
+                              |PC     | Current Permanent space capacity (KB).      |
+                              |VGC    | Number of Young generation GC Events.       |
+                              |FGC    | Number of Full GC Events.                   |
+                              +-------+---------------------------------------------+
+       gccause
+              This  option displays the same summary of garbage collection statistics as the -gcutil option,
+              but includes the causes of the last garbage collection event and (if applicable)  the  current
+              garbage  collection event. In addition to the columns listed for -gcutil, this option adds the
+              following columns:
+
+
+
+                                  +-------+--------------------------------------+
+                                  |Column |             Description              |
+                                  +-------+--------------------------------------+
+                                  |LGCC   | Cause of last Garbage Collection.    |
+                                  |GCC    | Cause of current Garbage Collection. |
+                                  +-------+--------------------------------------+
+       gcnew  New Generation Statistics
+
+
+
+                               +-------+-------------------------------------------+
+                               |Column |                Description                |
+                               +-------+-------------------------------------------+
+                               |SOC    | Current survivor space 0 capacity (KB).   |
+                               |S1C    | Current survivor space 1 capacity (KB).   |
+                               |S0U    | Survivor space 0 utilization (KB).        |
+                               |S1U    | Survivor space 1 utilization (KB).        |
+                               |TT     | Tenuring threshold.                       |
+                               |MTT    | Maximum tenuring threshold.               |
+                               |DSS    | Desired survivor size (KB).               |
+                               |EC     | Current eden space capacity (KB).         |
+                               |EU     | Eden space utilization (KB).              |
+                               |VGC    | Number of young generation GC events.     |
+                               |VGCT   | Young generation garbage collection time. |
+                               +-------+-------------------------------------------+
+       gcnewcapacity
+              New Generation Space Size Statistics
+
+
+
+                                +-------+-----------------------------------------+
+                                |Column |               Description               |
+                                +-------+-----------------------------------------+
+                                |NGCMN  | Minimum new generation capacity (KB).   |
+                                |NGCMX  | Maximum new generation capacity (KB).   |
+                                |NGC    | Current new generation capacity (KB).   |
+                                |S0CMX  | Maximum survivor space 0 capacity (KB). |
+                                |S0C    | Current survivor space 0 capacity (KB). |
+                                |S1CMX  | Maximum survivor space 1 capacity (KB). |
+                                |S1C    | Current survivor space 1 capacity (KB). |
+                                |ECMX   | Maximum eden space capacity (KB).       |
+                                |EC     | Current eden space capacity (KB).       |
+                                |YGC    | Number of young generation GC events.   |
+                                |FGC    | Number of Full GC Events.               |
+                                +-------+-----------------------------------------+
+       gcold  Old and Permanent Generation Statistics
+
+
+
+                                 +-------+----------------------------------------+
+                                 |Column |              Description               |
+                                 +-------+----------------------------------------+
+                                 |PC     | Current permanent space capacity (KB). |
+                                 |PU     | Permanent space utilization (KB).      |
+                                 |OC     | Current old space capacity (KB).       |
+                                 |OU     | Old space utilization (KB).            |
+                                 |YGC    | Number of young generation GC events.  |
+                                 |FGC    | Number of Full GC events.              |
+                                 |FGCT   | Full garbage collection time.          |
+                                 |GCT    | Total garbage collection time.         |
+                                 +-------+----------------------------------------+
+       gcoldcapacity
+              Old Generation Statistics
+
+
+
+                                 +-------+---------------------------------------+
+                                 |Column |              Description              |
+                                 +-------+---------------------------------------+
+                                 |OGCMN  | Minimum old generation capacity (KB). |
+                                 |OGCMV  | Maximum old generation capacity (KB). |
+                                 |OGC    | Current old generation capacity (KB). |
+                                 |OC     | Current old space capacity (KB).      |
+                                 |YGC    | Number of young generation GC events. |
+                                 |FGC    | Number of Full GC events.             |
+                                 |FGCT   | Full garbage collection time.         |
+                                 |GCT    | Total garbage collection time.        |
+                                 +-------+---------------------------------------+
+       gcpermcapacity
+              Permanent Generation Statistics
+
+
+
+                              +-------+---------------------------------------------+
+                              |Column |                 Description                 |
+                              +-------+---------------------------------------------+
+                              |PGCMN  | Minimum permanent generation capacity (KB). |
+                              |PGCMX  | Maximum permanent generation capacity (KB). |
+                              |PGC    | Current permanent generation capacity (KB). |
+                              |PC     | Current permanent space capacity (KB).      |
+                              |YGC    | Number of young generation GC events.       |
+                              |FGC    | Number of Full GC events.                   |
+                              |FGCT   | Full garbage collection time.               |
+                              |GCT    | Total garbage collection time.              |
+                              +-------+---------------------------------------------+
+       gcutil Summary of Garbage Collection Statistics
+
+
+
+                               +-------+-------------------------------------------+
+                               |Column |                Description                |
+                               +-------+-------------------------------------------+
+                               |S0     | Survivor space 0 utilization  as  a  per- |
+                               |       | centage  of the space's current capacity. |
+                               |S1     | Survivor space 1 utilization  as  a  per- |
+                               |       | centage  of the space's current capacity. |
+                               |E      | Eden space utilization as a percentage of |
+                               |       | the space's current capacity.             |
+                               |O      | Old  space utilization as a percentage of |
+                               |       | the space's current capacity.             |
+                               |P      | Permanent space utilization as a percent- |
+                               |       | age of the space's current capacity.      |
+                               |YGC    | Number of young generation GC events.     |
+                               |YGCT   | Young generation garbage collection time. |
+                               |FGC    | Number of Full GC events.                 |
+                               |FGCT   | Full garbage collection time.             |
+                               |GCT    | Total garbage collection time.            |
+                               +-------+-------------------------------------------+
+       printcompilation
+              HotSpot Compiler Method Statistics
+
+
+
+                             +---------+---------------------------------------------+
+                             | Column  |                 Description                 |
+                             +---------+---------------------------------------------+
+                             |Compiled | Number of compilation tasks performed.      |
+                             |Size     | Number of bytes of bytecode for the method. |
+                             |Type     | Compilation type.                           |
+                             |Method   | Class  name and method name identifying the |
+                             |         | compiled  method.  Class  name   uses   "/" |
+                             |         | instead  of  "."  as  namespace  separator. |
+                             |         | Method name is the method within the  given |
+                             |         | class.  The  format for these two fields is |
+                             |         | consistent with the HotSpot - XX:+PrintCom- |
+                             |         | plation option.                             |
+                             +---------+---------------------------------------------+
+
+EXAMPLES
+       This section presents some examples of monitoring a local JVM with a lvmid of 21891.
+
+   Using the gcutil option
+       This  example  attaches  to lvmid 21891 and takes 7 samples at 250 millisecond intervals and displays
+       the output as specified by the -gcutil option.
+
+       jstat -gcutil 21891 250 7
+         S0     S1     E      O      P     YGC    YGCT    FGC    FGCT     GCT
+        12.44   0.00  27.20   9.49  96.70    78    0.176     5    0.495    0.672
+        12.44   0.00  62.16   9.49  96.70    78    0.176     5    0.495    0.672
+        12.44   0.00  83.97   9.49  96.70    78    0.176     5    0.495    0.672
+         0.00   7.74   0.00   9.51  96.70    79    0.177     5    0.495    0.673
+         0.00   7.74  23.37   9.51  96.70    79    0.177     5    0.495    0.673
+         0.00   7.74  43.82   9.51  96.70    79    0.177     5    0.495    0.673
+         0.00   7.74  58.11   9.51  96.71    79    0.177     5    0.495    0.673
+
+       The output of this example shows that a young generation collection occurred between the 3rd and  4th
+       sample.  The  collection  took  0.001 seconds and promoted objects from the eden space (E) to the old
+       space (O), resulting in an increase of old space utilization from 9.49% to 9.51%. Before the  collec-
+       tion, the survivor space was 12.44% utilized, but after this collection it is only 7.74% utilized.
+
+   Repeating the column header string
+       This  example attaches to lvmid 21891 and takes samples at 250 millisecond intervals and displays the
+       output as specified by -gcutil option. In addition, it uses the  -h3  option  to  output  the  column
+       header after every 3 lines of data.
+
+       jstat -gcnew -h3 21891 250
+        S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
+         64.0   64.0    0.0   31.7 31  31   32.0    512.0    178.6    249    0.203
+         64.0   64.0    0.0   31.7 31  31   32.0    512.0    355.5    249    0.203
+         64.0   64.0   35.4    0.0  2  31   32.0    512.0     21.9    250    0.204
+        S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
+         64.0   64.0   35.4    0.0  2  31   32.0    512.0    245.9    250    0.204
+         64.0   64.0   35.4    0.0  2  31   32.0    512.0    421.1    250    0.204
+         64.0   64.0    0.0   19.0 31  31   32.0    512.0     84.4    251    0.204
+        S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
+         64.0   64.0    0.0   19.0 31  31   32.0    512.0    306.7    251    0.204
+
+       In  addition  to showing the repeating header string, this example shows that between the 2nd and 3rd
+       samples, a young GC occurred. Its duration was 0.001 seconds. The collection found enough  live  data
+       that  the  survivor  space  0  utilization  (S0U) would would have exceeded the desired survivor Size
+       (DSS). As a result, objects were promoted to the old generation (not visible in this output), and the
+       tenuring threshold (TT) was lowered from 31 to 2.
+
+       Another  collection  occurs between the 5th and 6th samples. This collection found very few survivors
+       and returned the tenuring threshold to 31.
+
+   Including a time stamp for each sample
+       This example attaches to lvmid 21891 and takes 3 samples at 250 millisecond intervals. The -t  option
+       is used to generate a time stamp for each sample in the first column.
+
+       jstat -gcoldcapacity -t 21891 250 3
+       Timestamp  OGCMN    OGCMX    OGC      OC       YGC   FGC   FGCT    GCT
+       150.1      1408.0   60544.0  11696.0  11696.0  194   80    2.874   3.799
+       150.4      1408.0   60544.0  13820.0  13820.0  194   81    2.938   3.863
+       150.7      1408.0   60544.0  13820.0  13820.0  194   81    2.938   3.863
+
+   Monitor instrumentation for a remote JVM
+       This example attaches to lvmid 40496 on the system named remote.domain using the -gcutil option, with
+       samples taken every second indefinitely.
+
+       jstat -gcutil 40496@remote.domain 1000
+        ... output omitted
+
+       The lvmid is combined with the name of the remote host to construct a  vmid  of  40496@remote.domain.
+       This  vmid  results in the use of the rmi protocol to communicate to the default jstatd server on the
+       remote host. The jstatd server is located using the rmiregistry on remote.domain that is bound to the
+       default rmiregistry port (port 1099).
+
+SEE ALSO
+       java(1) jps(1) jstatd(1) rmiregistry(1)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/jvm-jstat-get	Mon May 09 09:19:31 2011 +0200
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Companion to jvm-stat-make to obtain actual value from dumped statistics.
+# Invocation:
+# jvm-jstat-get <name> <stat> <field>
+#	where	name is symbolic name (service name etc.),
+#		stat is statistic name (stats file) and
+#		field number (from 1) to be returned
+
+if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
+	echo -e "Missing service name, stat or field"
+	exit 1
+fi
+
+UID=`id -u`
+N=$1
+STAT=$2
+FIELD=$3
+
+D=/tmp/jvm-jstat-$UID-$N
+
+[ -d $D ] || exit 1;
+
+tail -1 $D/$STAT | awk '{print $'$FIELD'}'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/jvm-jstat-make	Mon May 09 09:19:31 2011 +0200
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Makes statistics for JVM via jstat.
+# Invocation:
+# jvm-jstat-make <name> <pid>
+#	where name is symbolic name (service name etc.)
+#	  and pid is process id (as reported by jps(1) or ps(1) )
+
+if [ -z "$1" -o -z "$2" ]; then
+	echo -e "Missing service name or pid"
+	exit 1
+fi
+
+JSTAT="sudo jstat"
+UID=`id -u`
+N=$1
+PID=$2
+D=/tmp/jvm-jstat-$UID-$N
+
+[ -d $D ] || mkdir -p $D
+
+$JSTAT -options | sed -e 's/-//' | while read op; do
+	$JSTAT -$op $PID > $D/$op
+done