f712e12f98
When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn
248 lines
5.0 KiB
HTML
248 lines
5.0 KiB
HTML
<html>
|
|
<head>
|
|
<title>
|
|
Using HotSpot Serviceability Agent (SA)
|
|
</title>
|
|
</head>
|
|
<body>
|
|
<h1>Using HotSpot Serviceability Agent (SA)</h1>
|
|
|
|
<h3>HSDB GUI</h3>
|
|
<p>
|
|
The top-level GUI program using the HotSpot Serviceability Agent APIs is
|
|
called <b>HSDB</b>, the "HotSpot Debugger". To run it, type "hsdbproc.sh"
|
|
or "hsdbwindbg.bat" or 64-bit variants (on Unix, Windows platforms
|
|
respectively). More info. on HSDB GUI are in <a href="hsdb.html">hsdb.html</a>.
|
|
</p>
|
|
|
|
<h3>SA Modes</h3>
|
|
<p>
|
|
There are three modes for the SA debugger:
|
|
<ul>
|
|
<li>attaching to a local process,
|
|
<li>opening a core file, and
|
|
<li>attaching to a remote "debug server".
|
|
</ul>
|
|
<p>
|
|
The remote case requires two programs to be running on the remote machine:
|
|
the rmiregistry (see the script "start-rmiregistry.sh" in this directory;
|
|
run this in the background) and the debug server (see the script
|
|
"start-debug-server-proc.sh"), in that order. start-rmiregistry.sh takes no
|
|
arguments; start-debug-server-proc.sh (or -windbg.bat) takes as argument
|
|
the process ID or the executable and core file names to allow remote debugging
|
|
of.
|
|
</p>
|
|
|
|
<h3>Command line HSDB</h3>
|
|
<p>
|
|
There are also command line HSDB variants ("clhsdbproc.sh" or "clhsdbwindbg.bat"
|
|
or 64-bit variants). There is also a JavaScript based command line interface
|
|
called "jsdbproc.sh" [or "jsdbwindbg.bat" or 64-bit variants]. More details on
|
|
command line interfaces can be found in
|
|
<ul>
|
|
<li><a href="clhsdb.html">clhsdb.html</a>
|
|
<li><a href="jsdb.html">jsdb.html</a>
|
|
</ul>
|
|
</p>
|
|
|
|
<h3>Other command line tools</h3>
|
|
<p>
|
|
The following table lists all SA command line tools. <xxx>windbg.bat
|
|
files are for Windows. .sh files are for Solaris. <xxx>64.sh are for
|
|
64 bit debugees.
|
|
</p>
|
|
|
|
<table border="1">
|
|
<tr>
|
|
<th>
|
|
Tool
|
|
</th>
|
|
<th>
|
|
Description
|
|
</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
dumpflagsproc.sh,
|
|
dumpflagsproc64.sh,
|
|
dumpflagswindbg.bat
|
|
dumpflagswindbg64.bat
|
|
</td>
|
|
<td>
|
|
dumps name and value of all -XX JVM command line arguments passed
|
|
to debuggee.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
<a name="dumpsysprops"></a>
|
|
dumpsyspropsproc.sh,
|
|
dumpsyspropsproc64.sh,
|
|
dumpsyspropswindbg.bat
|
|
dumpsyspropswindbg64.bat
|
|
</td>
|
|
<td>
|
|
This prints name and value of Java level System properties.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
<a name="heapdump"></a>
|
|
heapdumpproc.sh,
|
|
heapdumpproc64.sh,
|
|
heapdumpwindbg.bat
|
|
heapdumpwindbg64.bat
|
|
</td>
|
|
<td>
|
|
Dumps heap in a file in hprof binary format.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
<a name="heapsum"></a>
|
|
heapsumproc.sh,
|
|
heapsumproc64.sh,
|
|
heapsumwindbg.bat
|
|
heapsumwindbg64.bat
|
|
</td>
|
|
<td>
|
|
Prints summary information on Java heap.
|
|
</td>
|
|
</tr>
|
|
|
|
|
|
<tr>
|
|
<td>
|
|
jcoreproc.sh,
|
|
jcoreproc64.sh,
|
|
jcorewindbg.bat
|
|
jcorewindbg64.bat
|
|
</td>
|
|
<td>
|
|
This can retrieve .class files from the debuggee.
|
|
set the environment variable <b>JCORE_PACKAGES</b> to comman separated list of
|
|
packages whose classes have to be retrieved from the core file.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<tr>
|
|
<td>
|
|
jstackproc.sh,
|
|
jstackproc64.sh,
|
|
jstackwindbg.bat
|
|
jstackwindbg64.bat
|
|
</td>
|
|
<td>
|
|
used to get java stack trace for all java threads.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
jhistoproc.sh,
|
|
jhistoproc64.sh,
|
|
jhistowindbg.bat
|
|
jhistowindbg64.bat
|
|
</td>
|
|
<td>
|
|
used to get object histogram of java heap.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
permstatproc.sh,
|
|
permstatproc64.sh,
|
|
permstatwindbg.bat
|
|
permstatwindbg64.bat
|
|
</td>
|
|
<td>
|
|
To gather statistics on perm. generation.
|
|
</td>
|
|
</tr>
|
|
|
|
<a name="mixed_pstack"></a>
|
|
<tr>
|
|
<tr>
|
|
<td>
|
|
pstackproc.sh,
|
|
pstackproc64.sh,
|
|
pstackwindbg.bat
|
|
pstackwindbg64.bat
|
|
</td>
|
|
<td>
|
|
This is cross platform mixed mode pstack utility. This works on any (non-java as well) process, core dump. For java process and core dumps, this prints both java and C/C++ frames.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
pmapproc.sh,
|
|
pmapproc64.sh,
|
|
pmapwindbg.bat
|
|
pmapwindbg64.bat
|
|
</td>
|
|
<td>
|
|
This is cross platform Solaris pmap-like utility.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
soqlproc.sh,
|
|
soqlproc64.sh,
|
|
soqlwindbg.bat
|
|
soqlwindbg64.bat
|
|
</td>
|
|
<td>
|
|
This is command line SOQL - Simple Object Query Language tool.
|
|
SOQL is SQL-like query language to query Java heap.
|
|
</td>
|
|
<tr>
|
|
<td>
|
|
start-debug-server-proc.sh,
|
|
start-debug-server-proc64.sh,
|
|
start-debug-server-windbg.bat,
|
|
start-debug-server-windbg64.bat,
|
|
start-rmiregistry.bat,
|
|
start-rmiregistry64.bat,
|
|
start-rmiregistry.sh
|
|
start-rmiregistry64.sh
|
|
</td>
|
|
<td>
|
|
These scripts are used to run SA remotely.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<h3>C2 Compilation Replay</h3>
|
|
<p>
|
|
When a java process crashes in compiled method, usually a core file is saved.
|
|
The C2 replay function can reproduce the compiling process in the core.
|
|
<a href="c2replay.html">c2replay.html</a>
|
|
|
|
<h3>Debugging transported core dumps</h3>
|
|
<p>
|
|
When a core dump is moved from the machine where it was produced to a
|
|
difference machine, it may not always be possible for SA to debug the same.
|
|
More info. on debugging on transported core dumps is in
|
|
<a href="transported_core.html">transported_core.html</a>.
|
|
</p>
|
|
|
|
<h3>SA Bugs</h3>
|
|
<p>
|
|
Not all of the possible states of target VMs have been tested (or
|
|
supportable) with SA. For example, the SA will probably not work at all
|
|
if it freezes the target VM during certain phases of GC. When filing bugs
|
|
a pointer to a core file (see gcore(1)) which the SA can not handle well
|
|
is best.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|