| <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> |