<?xml version="1.0" encoding="UTF-8"?> | |
<!-- | |
Copyright (c) 2008, 2018 SAP AG and IBM Corporation. | |
All rights reserved. This program and the accompanying materials | |
are made available under the terms of the Eclipse Public License v1.0 | |
which accompanies this distribution, and is available at | |
http://www.eclipse.org/legal/epl-v10.html | |
Contributors: | |
SAP AG - initial documentation | |
IBM Corporation - documentation on IBM specific dumps | |
--> | |
<!DOCTYPE task PUBLIC "-//OASIS//DTD DITA Task//EN" "task.dtd" > | |
<task id="task_acquiringheapdump" xml:lang="en-us"> | |
<title>Acquiring Heap Dumps</title> | |
<prolog> | |
<copyright> | |
<copyryear year=""></copyryear> | |
<copyrholder> | |
Copyright (c) 2008, 2018 SAP AG and IBM Corporation. | |
All rights reserved. This program and the accompanying materials | |
are made available under the terms of the Eclipse Public License v1.0 | |
which accompanies this distribution, and is available at | |
http://www.eclipse.org/legal/epl-v10.html | |
</copyrholder> | |
</copyright> | |
</prolog> | |
<taskbody> | |
<context> | |
<!-- *************************************************************** | |
* HPROF dumps | |
****************************************************************** --> | |
<p><b>HPROF Binary Heap Dumps</b></p> | |
<p><i>Get Heap Dump on an OutOfMemoryError</i></p> | |
<p> One can get a HPROF binary heap dump on an OutOfMemoryError for Sun JVM | |
(1.4.2_12 or higher and 1.5.0_07 or higher), Oracle JVMs, | |
OpenJDK JVMs, | |
HP-UX JVM (1.4.2_11 or | |
higher) and SAP JVM (since 1.5.0) by setting the following JVM | |
parameter:</p> | |
<p> | |
<codeblock>-XX:+HeapDumpOnOutOfMemoryError</codeblock> | |
</p> | |
<p>The heap dump is written to the work directory.</p> | |
<p><i>Interactively Trigger a Heap Dump</i></p> | |
<p> To get heap dump on demand one can add the following parameter to the JVM | |
and press CTRL + BREAK in the preferred moment:</p> | |
<p> | |
<codeblock>-XX:+HeapDumpOnCtrlBreak</codeblock> | |
</p> | |
<p><i>HPROF agent</i></p> | |
<p>To use the HPROF agent to generate a dump on the end of execution, or on SIGQUIT signal use the following | |
JVM parameter:</p> | |
<p> | |
<codeblock>-agentlib:hprof=heap=dump,format=b</codeblock> | |
</p> | |
<p> Alternatively, other tools can be used to acquire a heap dump: | |
</p> | |
<ul> | |
<li> | |
<cmdname>jmap -dump:format=b,file=<filename.hprof> <pid></cmdname> | |
</li> | |
<li>JConsole (see sample usage in <xref href="../gettingstarted/basictutorial.dita">Basic Tutorial</xref>)</li> | |
<li>Memory Analyzer (see bottom of page)</li> | |
</ul> | |
<!-- *************************************************************** | |
* IBM dumps | |
****************************************************************** --> | |
<p><b>System Dumps and Heap Dumps from IBM Virtual Machines </b></p> | |
<p> | |
Memory Analyzer can also read memory-related information from IBM system | |
dumps and from Portable Heap Dump (PHD) files. For this purpose one just | |
has to install the IBM DTFJ feature into Memory Analyzer. | |
Follow the <xref href="installDTFJ.dita">IBM DTFJ feature installation instructions</xref>. Once the DTFJ | |
feature is successfully installed, then | |
<menucascade> | |
<uicontrol>File</uicontrol> | |
<uicontrol>Open Heap Dump</uicontrol> | |
</menucascade> | |
menu should also offer the following options for the file types: | |
<ul> | |
<li>All known formats</li> | |
<li>HPROF binary heap dumps</li> | |
<li>IBM 1.4.2 SDFF<fn>IBM DTFJ feature versions >= 1.12.29003.201808011034 do not have this option</fn></li> | |
<li>IBM Javadumps</li> | |
<li>IBM SDK for Java (J9) system dumps</li> | |
<li>IBM SDK for Java Portable Heap Dumps</li> | |
</ul> | |
</p> | |
<p> | |
For a comparison of dump types, see <xref format="html" href="http://www.ibm.com/developerworks/library/j-memoryanalyzer/#table1">Debugging from dumps</xref>. | |
System dumps are simply operating system core dumps; therefore, they are a superset of portable heap dumps. | |
System dumps are far superior than PHDs, particularly for more accurate GC roots, thread-based analysis, and unlike PHDs, | |
system dumps contain memory contents like HPROFs. | |
</p> | |
<p> | |
Older versions of IBM Java (e.g. < 5.0SR12, < 6.0SR9) require running jextract on the operating system core dump | |
which produced a zip file that contained the core dump, XML or SDFF file, and shared libraries. The IBM DTFJ feature | |
still supports reading these jextracted zips although IBM DTFJ feature version 1.12.29003.201808011034 and later cannot read IBM Java 1.4.2 SDFF files, so MAT cannot read them either. | |
Dumps from newer versions of IBM Java do not require jextract for use in | |
MAT since DTFJ is able to directly read each supported operating system's core dump format. | |
Simply ensure that the operating system core dump file ends with the <b>.dmp</b> suffix for visibility in the MAT Open Heap Dump selection. | |
It is also common to zip core dumps because they are so large and compress very well. If a core dump is compressed with <b>.zip</b>, | |
the IBM DTFJ feature in MAT is able to decompress the ZIP file and read the core from inside (just like a jextracted zip). | |
The only significant downsides to system dumps over PHDs is that they are much larger, they usually take longer to produce, | |
they may be useless if they are manually taken in the middle of an exclusive event that manipulates the underlying Java heap | |
such as a garbage collection, and they sometimes require operating system configuration ( | |
<xref format="html" href="http://www.ibm.com/support/knowledgecenter/SSYKE2_7.1.0/com.ibm.java.lnx.71.doc/diag/problem_determination/linux_setup.html">Linux</xref>, | |
<xref format="html" href="http://www.ibm.com/support/knowledgecenter/SSYKE2_7.1.0/com.ibm.java.aix.71.doc/diag/problem_determination/aix_setup_full_core.html">AIX</xref>) | |
to ensure non-truncation. | |
</p> | |
<p> | |
In recent versions of IBM Java (> 6.0.1), by default, when an OutOfMemoryError is thrown, IBM Java produces a system dump, PHD, | |
javacore, and Snap file on the first occurrence for that process (although often the core dump is suppressed by the default 0 | |
core ulimit on operating systems such as Linux). For the next three occurrences, it produces only a PHD, javacore, and Snap. | |
If you only plan to use system dumps, and you've configured your operating system correctly as per the links above (particularly | |
core and file ulimits), then you may disable PHD generation with -Xdump:heap:none. For versions of IBM Java older than 6.0.1, | |
you may switch from PHDs to system dumps using | |
<codeblock>-Xdump:system:events=systhrow,filter=java/lang/OutOfMemoryError,request=exclusive+prepwalk -Xdump:heap:none</codeblock> | |
</p> | |
<p> | |
In addition to an OutOfMemoryError, system dumps may be produced using operating system tools (e.g. gcore in gdb for Linux, | |
gencore for AIX, Task Manager for Windows, SVCDUMP for z/OS, etc.), using the | |
<xref format="html" href="https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.api.80.doc/com.ibm.jvm.ras/index.html">IBM Java APIs</xref>, | |
using the various options of <xref format="html" href="http://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/dump_agents.html">-Xdump</xref>, | |
using <xref format="html" href="https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=7d3dc078-131f-404c-8b4d-68b3b9ddd07a">Java Surgery</xref>, | |
and more. | |
</p> | |
<p> | |
Versions of IBM Java older than IBM JDK 1.4.2 SR12, 5.0 SR8a and 6.0 SR2 are known to produce inaccurate GC root information. | |
</p> | |
<!-- *************************************************************** | |
* Acquire from Memory Analyzer | |
****************************************************************** --> | |
<p><b>Acquire Heap Dump from Memory Analyzer</b></p> | |
<p> | |
If the Java process from which the heap dump is to be acquired is on the | |
same machine as the Memory Analyzer, it is possible to acquire a heap dump | |
directly from the Memory Analyzer. Dumps acquired this way are directly | |
parsed and opened in the tool. | |
</p> | |
<p>Acquiring the heap dump is VM specific. Memory Analyzer comes with | |
several so called heap dump providers - for Oracle and Sun based VMs | |
(needs a Oracle or Sun JDK | |
with jmap) and for IBM VMs (needs an IBM JDK or JRE). | |
Also extension points | |
are provided for adopters to plug-in their own heap dump providers. | |
</p> | |
<p> | |
To trigger a heap dump from Memory Analyzer open the | |
<menucascade> | |
<uicontrol>File</uicontrol> | |
<uicontrol>Acquire Heap Dump...</uicontrol> | |
</menucascade> | |
menu item. | |
</p> | |
<p>Depending on the concrete execution environment the pre-installed | |
heap dump | |
providers may work with their default settings and in this case a list of | |
running Java processes should appear: | |
To make selection easier, | |
the order of the Java processes can be altered by clicking on the column titles | |
for <uicontrol>pid</uicontrol> or <uicontrol>Heap Dump Provider</uicontrol>. | |
</p> | |
<image href="../mimes/acquire.png"> | |
<alt>Select a process to be dumped</alt> | |
</image> | |
<p> | |
One can now select from which process a heap dump should be acquired, provide | |
a preferred | |
location for the heap dump and press | |
<uicontrol>Finish</uicontrol> | |
to acquire the dump. Some of the heap | |
dump providers may allow (or require) additional parameters (e.g. type of | |
the heap dump) to be set. This can be done by using | |
<menucascade> | |
<uicontrol>Next</uicontrol> | |
</menucascade> | |
button to get to the | |
<wintitle>Configuring Heap Dump Provider Arguments</wintitle> | |
page of the wizard. | |
</p> | |
<p> | |
<i>Configuring the Heap Dump Providers</i> | |
</p> | |
<p> | |
If the process list is empty try to configure the available heap dump | |
providers. To do this | |
press | |
<uicontrol>Configure...</uicontrol> | |
, select a matching provider from the list and click on it. | |
You can see | |
then what are the required settings and specify them. | |
<menucascade> | |
<uicontrol>Next</uicontrol> | |
</menucascade> | |
will then apply any changed settings, and | |
refresh the JVM list if any | |
settings have been changed. | |
<menucascade> | |
<uicontrol>Prev</uicontrol> | |
</menucascade> | |
will return to the | |
current JVM list without applying any changed | |
settings. To then apply the | |
changed settings | |
reenter and exit the | |
<wintitle>Configure Heap Dump Providers...</wintitle> | |
page as follows: | |
<menucascade> | |
<uicontrol>Configure...</uicontrol> | |
<uicontrol>Next</uicontrol> | |
</menucascade> | |
</p> | |
<p> | |
If a process is selected before pressing | |
<uicontrol>Configure...</uicontrol> | |
then the corresponding | |
dump provider will be selected on entering the | |
<wintitle>Configure Heap Dump Providers...</wintitle> | |
page. | |
</p> | |
<p> | |
<dl> | |
<dlentry> | |
<dt id="1">HPROF jmp dump provider</dt> | |
<dd> | |
This provider uses the | |
<cmdname>jps</cmdname> | |
command supplied with an Oracle or OpenJDK based JDK to list the | |
running JVMs on the system. The provider then uses the | |
<cmdname>jmap</cmdname> | |
command to get the chosen | |
JVM to generate an HPROF dump. This | |
provider requires a JDK (Java | |
development kit), not a JRE | |
(Java | |
runtime environment) for those two commands. IBM JDKs do not | |
have | |
the | |
<cmdname>jps</cmdname> | |
or | |
<cmdname>jmap</cmdname> | |
commands. The commands on an OpenJ9 JDK may not work well enough | |
for | |
this provider to work with those JVMs. | |
</dd> | |
</dlentry> | |
<dlentry id="2"> | |
<dt>Attach API</dt> | |
<dd> | |
This uses the | |
<xref | |
href="https://docs.oracle.com/javase/8/docs/jdk/api/attach/spec/com/sun/tools/attach/package-summary.html" | |
format="html"> | |
<apiname>com.sun.tools.attach</apiname> | |
</xref> | |
or | |
<xref | |
href="https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/user/attachapi.html" | |
format="html"> | |
<apiname>com.ibm.tools.attach</apiname> | |
</xref> | |
APIs to list the JVMs and then to attach to the chosen JVM to | |
generate a | |
dump. | |
The Attach API is supplied as part of IBM JDKs and | |
JREs, but is only | |
supplied as part of Oracle or OpenJDK JDKs | |
in | |
<codeph>tools.jar</codeph> | |
and not as part of JREs. Therefore if Memory Analyzer is run with | |
an Oracle JRE | |
then this dump provider will not be available. | |
The | |
<apiname>com.sun.tools.attach</apiname> | |
API is available on Oracle and OpenJDK JDKs, on OpenJ9 JDKs and | |
JREs | |
and IBM JDKs and JREs version Java 8 SR5 or later. | |
The | |
<apiname>com.ibm.tools.attach</apiname> | |
API is available on earlier IBM JDKs and JREs. | |
The Attach API dump | |
provider automatically uses whichever Attach API | |
is available, | |
and | |
loads | |
<codeph>tools.jar</codeph> | |
if required. | |
The Attach API with Java 9 or later does not permit a Java process | |
to connect to itself, so MemoryAnalyzer cannot generate a dump of | |
itself using the Attach API dump provider. Use another dump provider instead. | |
</dd> | |
</dlentry> | |
<dlentry id="3"> | |
<dt>Attach API with helper JVM</dt> | |
<dd> | |
If Memory Analyzer is run with an Oracle JRE then this dump | |
provider can be used with an Oracle JDK by providing a path | |
to a | |
<cmdname>java</cmdname> | |
executable. The dump provider will load the | |
<codeph>tools.jar</codeph> | |
if required. | |
so that the | |
<apiname>com.sun.tools.attach</apiname> | |
API | |
is acessible. This provider can also be used to list JVMs | |
of a | |
different type from the JVM used to run Memory Analyzer. | |
For example | |
dumps from IBM JVMs can be generated by specifying a | |
path to | |
an IBM | |
JVM | |
<cmdname>java</cmdname> | |
command even when Memory Analyzer is run with an Oracle JVM. | |
</dd> | |
</dlentry> | |
</dl> | |
</p> | |
<p> | |
<i>Options</i> | |
</p> | |
<p> | |
<dl> | |
<dlhead> | |
<dthd>Dump Type</dthd> | |
</dlhead> | |
<dlentry> | |
<dt>System</dt> | |
<dd> | |
These process core dumps are generated using the | |
<apiname>com.ibm.jvm.Dump.SystemDump()</apiname> | |
method | |
called by an agent library generated and loaded into the | |
target JVM by | |
Memory Analyzer. | |
These dumps can be generated by IBM | |
and | |
OpenJ9 JVMs. | |
</dd> | |
</dlentry> | |
<dlentry> | |
<dt>Heap</dt> | |
<dd> | |
These Portable Heap Dumps are generated using the | |
<apiname>com.ibm.jvm.Dump.HeapDump()</apiname> | |
method | |
called by an agent library generated and loaded into the | |
target JVM by | |
Memory Analyzer. | |
These dumps can be generated by IBM | |
and | |
OpenJ9 JVMs. | |
</dd> | |
</dlentry> | |
<dlentry> | |
<dt>Java</dt> | |
<dd> | |
These Javacore dumps are generated using the | |
<apiname>com.ibm.jvm.Dump.JavaDump()</apiname> | |
method | |
called by an agent library generated and loaded into the | |
target JVM by | |
Memory Analyzer. | |
These dumps can be generated by IBM | |
and OpenJ9 | |
JVMs. | |
</dd> | |
</dlentry> | |
<dlentry> | |
<dt>HPROF</dt> | |
<dd> | |
These HPROF dumps are generated using the | |
<apiname>com.sun.management:type=HotSpotDiagnostic</apiname> | |
MXBean called in an agent library generated and loaded into the | |
target JVM by Memory Analyzer. | |
These dumps can be generated by | |
Oracle and | |
OpenJDK JVMs. | |
</dd> | |
</dlentry> | |
</dl> | |
<dl> | |
<dlhead> | |
<dthd>Other options</dthd> | |
</dlhead> | |
<dlentry> | |
<dt>compress</dt> | |
<dd> | |
System dumps can be processed using | |
<xref | |
href="https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.lnx.80.doc/diag/tools/dump_viewer_dtfjview/jextract.html" | |
format="html"> | |
<cmdname>jextract</cmdname> | |
</xref> | |
which compressed the dump and | |
also adds extra system information so | |
that the dump could be moved to | |
another machine. | |
Portable Heap Dump | |
(PHD) files generated with the Heap option can be compressed using | |
the gzip compressor | |
to reduce | |
the file size. | |
</dd> | |
</dlentry> | |
<dlentry> | |
<dt>live</dt> | |
<dd>On IBM JVMs this forces a garbage collection before a dump is | |
taken. This could affect | |
the performance of the program running on | |
the target JVM, | |
but may reduce the size of PHD Heap dumps. | |
On Oracle and | |
OpenJDK JVMs this | |
dumps only live objects into the HPROF file and | |
should reduce its | |
size. | |
By default, | |
Memory Analyzer removes the | |
non-live objects from | |
the dump as it indexes | |
the dump and builds the | |
snapshot, and puts | |
information about those objects | |
in the unreachable | |
objects histogram. | |
If this histogram is used or the 'keep | |
unreachable objects' | |
option is | |
set then the live option should not be | |
set as it will remove | |
required information.</dd> | |
</dlentry> | |
<dlentry> | |
<dt>listattach</dt> | |
<dd>This is used when listing JVMs using the Attach API. The dump | |
provider then attaches to each | |
running JVM in the list and extracts | |
more information to give a better | |
description. This can take a | |
little longer, so if the list operation | |
is cancelled then this | |
option is disabled so the next listing | |
will be faster. The option | |
can be reenabled if required.</dd> | |
</dlentry> | |
<dlentry> | |
<dt>dumpdir</dt> | |
<dd> | |
IBM JVMs produce dumps in a directory specified by the target JVM, | |
not by Memory Analyzer. | |
Memory Analyzer needs to find the dump it | |
caused to be generated, and | |
looks in the | |
target JVM | |
<codeph>user.dir</codeph> | |
for the dump files. If this is not the right place then Memory | |
Analyzer will not find the | |
gnerated dump, so the user would have to | |
find it manually afterwards. If the | |
user knows | |
where the target JVM | |
will produce dumps then it can be entered using | |
this option. | |
</dd> | |
</dlentry> | |
<dlentry> | |
<dt>dumptemplate</dt> | |
<dd> | |
This gives an example file name to be used for the dump. The time | |
and date is inserted into the name using | |
substitution variable 0, | |
for example | |
<codeph>{0,date,yyyyMMdd.HHmmss}</codeph> | |
. | |
The process identifier is inserted using subsitution variable 1, | |
for | |
example | |
<codeph>{1,number,0}</codeph> | |
. | |
The instance number, used to make the dump file unique, is | |
inserted | |
using subsitution variable 2, for example | |
<codeph>{2,number,0000}</codeph> | |
. The extra 0000 is a standard MessageFormat modifier giving the | |
minimum | |
number of digits to use. | |
</dd> | |
</dlentry> | |
</dl> | |
</p> | |
<p><b>Multiple snapshots in one heap dump</b></p> | |
<p> | |
Occasionally heap dumps files can be generated which contain multiple heap dumps snapshots. | |
If an HPROF dump is generated using | |
<codeblock>-agentlib:hprof=heap=dump,format=b</codeblock> | |
then if a heap dump is triggered multiple times all the heap dumps will be written to one file. | |
An IBM z/OS system dump can contain data from multiple address spaces and processes. | |
It is therefore possible that the dump file contains heap dump snapshots from multiple Java runtimes. | |
</p> | |
<p> | |
Memory Analyzer 1.2 and earlier handled this situation by choosing the first heap dump snapshot found unless another | |
was selected via an environment variable or MAT DTFJ configuration option. | |
</p> | |
<p> | |
Memory Analyzer 1.3 handles this situation by detecting the multiple dumps, then presenting a dialog | |
for the user to select the required snapshot. | |
</p> | |
<image href="../mimes/multiple_snapshots.png"> | |
<alt>Choose a snapshot to be analyzed</alt> | |
</image> | |
<p> | |
The index files generated have a component in the file name from the snapshot identifier, so the index | |
files from each snapshot can be distinguished. | |
This means that multiple snapshots from one heap dump file can be examined in Memory Analyzer | |
simultaneously. | |
The heap dump history for the file remembers the last snapshot selected for that file, though when | |
the snapshot is reopened via the history the index file is also shown in the history. | |
To open another snapshot in the dump, close the first snapshot, then reopen the heap dump file using the File menu and | |
another snapshot can be chosen to be parsed. | |
The first snapshot can then be reopened using the index file in the history, and both snapshots can | |
be viewed at once. | |
</p> | |
<p> | |
<b>Summary</b> | |
</p> | |
<p>The following table shows the availability of VM options and tools | |
on the various platforms:</p> | |
<table> | |
<tgroup cols="7"> | |
<colspec colname="COLSPEC1" colwidth="2*" /> | |
<colspec colname="COLSPEC2" colwidth="4*" /> | |
<colspec colname="COLSPEC3" colwidth="4*" /> | |
<colspec colname="COLSPEC4" colwidth="4*" /> | |
<colspec colname="COLSPEC5" colwidth="2*" /> | |
<colspec colname="COLSPEC6" colwidth="4*" /> | |
<colspec colname="COLSPEC7" colwidth="2*" /> | |
<colspec colname="COLSPEC8" colwidth="2*" /> | |
<colspec colname="COLSPEC9" colwidth="4*" /> | |
<colspec colname="COLSPEC10" colwidth="4*" /> | |
<thead> | |
<row> | |
<entry colname="COLSPEC1" valign="top">Vendor</entry> | |
<entry colname="COLSPEC2" valign="top">Release</entry> | |
<entry namest="COLSPEC3" nameend="COLSPEC5" valign="top">VM | |
Parameter</entry> | |
<entry namest="COLSPEC6" nameend="COLSPEC7" valign="top">Sun | |
Tools</entry> | |
<entry colname="COLSPEC8" valign="top">SAP Tool</entry> | |
<entry colname="COLSPEC9" valign="top">Attach</entry> | |
<entry colname="COLSPEC10" valign="top">MAT</entry> | |
</row> | |
</thead> | |
<tbody> | |
<row> | |
<entry /> | |
<entry /> | |
<entry colname="COLSPEC3">On out of memory</entry> | |
<entry colname="COLSPEC4">On Ctrl+Break</entry> | |
<entry>Agent</entry> | |
<entry>JMap</entry> | |
<entry>JConsole</entry> | |
<entry>JVMMon</entry> | |
<entry>API</entry> | |
<entry>acquire heap dump</entry> | |
</row> | |
<row> | |
<entry morerows="2">Sun, HP</entry> | |
<entry>1.4.2_12</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry /> | |
<entry /> | |
<entry /> | |
<entry /> | |
<entry>No</entry> | |
</row> | |
<row> | |
<entry>1.5.0_07</entry> | |
<entry>Yes</entry> | |
<entry>Yes (Since 1.5.0_15)</entry> | |
<entry>Yes</entry> | |
<entry>Yes (Only Solaris and Linux)</entry> | |
<entry /> | |
<entry /> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes (Only Solaris and Linux)</entry> | |
</row> | |
<row> | |
<entry>1.6.0_00</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry></entry> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry morerows="1">Oracle, OpenJDK, HP</entry> | |
<entry>1.7.0</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry></entry> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>1.8.0</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry></entry> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>SAP</entry> | |
<entry>Any 1.5.0</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>Yes (Only Solaris and Linux)</entry> | |
<entry /> | |
<entry>Yes</entry> | |
<entry></entry> | |
<entry /> | |
</row> | |
<row> | |
<entry morerows="6">IBM</entry> | |
<entry>1.4.2 SR12</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry></entry> | |
<entry>No</entry> | |
</row> | |
<row> | |
<entry>1.5.0 SR8a</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.ibm.tools.attach</entry> | |
<entry>No</entry> | |
</row> | |
<row> | |
<entry>1.6.0 SR2</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.ibm.tools.attach</entry> | |
<entry>No</entry> | |
</row> | |
<row> | |
<entry>1.6.0 SR6</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.ibm.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>1.7.0</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.ibm.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>1.8.0</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.ibm.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>1.8.0 SR5</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
<row> | |
<entry>OpenJ9</entry> | |
<entry>1.8.0</entry> | |
<entry>Yes</entry> | |
<entry>Yes</entry> | |
<entry>No</entry> | |
<entry>No</entry> | |
<entry>Yes (PHD only)</entry> | |
<entry>No</entry> | |
<entry>com.sun.tools.attach</entry> | |
<entry>Yes</entry> | |
</row> | |
</tbody> | |
</tgroup> | |
</table> | |
</context> | |
</taskbody> | |
</task> |