README -- Release NotesJProbe Suite Version 5.0 Readme JProbe Profiler ¤ JProbe Memory Debugger ¤ JProbe Coverage ¤ JProbe Threadalyzer February 2003 Thank you for your interest in the JProbe line of products. This document contains notes on what's new for this release, system requirements for supported platforms, known issues, and release notes for each product. What's New in the JProbe Suite System Requirements What's Fixed in the JProbe Suite Known Issues in the JProbe Suite General Issues JProbe Profiler Issues JProbe Memory Debugger Issues JProbe Threadalyzer Issues JProbe Coverage Issues Platform-specific Issues Windows Issues Solaris Issues AIX Issues HP-UX Issues Linux Issues General UNIX Platform Issues Frequently Asked Questions Contacting Quest Software What's New for the JProbe Suite (contents) The JProbe Suite Version 5.0 offers some improvements for our corporate customers based on their feedback. Improved Printing in all products by generating a PDF version of the report, which you can then view, print, and even save from Adobe® Acrobat® Reader Improved Export Table lets you export data from a table to a CSV (comma-separated values) file, HTML file, or text file Simplified Filters in the JProbe LaunchPad dialog by converting filters to a standard package.class.method() representation Simplified JPL Files by returning to a properties-based file where the JProbe properties match the jplauncher command-line options JProbe Memory Debugger New Memory Leak Doctor, available from the Instance Detail View, tells you which objects hold direct or indirect references to your loitering object and lets you model what would happen if the reference were released New Threshold Asserts automatically alert you when there are more objects in the heap at the end of the use case than you expected. You can set thresholds on up to five classes. New Start Use Case button automates the start-up activities for your session: Requests a series of garbage collection, starts collecting stack traces, and (re)sets the checkpoint If Run Garbage Monitor is selected, turns on and clears the Garbage Monitor New Finish Use Case button automates the end-of-use-case activities for your session: Requests a series of garbage collections, takes a snapshot, and stops collecting stack traces If Thresholds are set up, checks to see if threshold values were exceeded and issues asserts If Run Garbage Monitor is selected, turns off the Garbage Monitor New Identify Hotspot Allocations Based on options now let you analyze garbage collection based on the largest short-lived object (Size of Instances Released by GC) or the most amount of memory freed (Memory Released by GC) Replaced Heap Browser window with a super-fast Class View window and Merged Allocation Points View window Replaced Reference Graph Color By options with more meaningful selections, including coloring objects by package Added Total Lines to the Class View (for new snapshots only) and the Snapshot Difference window Changed views so that you're in control of when data is refreshed in an open window Added Triggers and API methods for Request Garbage Collection, Start Use Case, and Finish Use Case Removed Include Garbage Collected Objects in Heap Snapshot Removed Trace Constructor Invocations button - now controlled by Start Use Case button Removed Monitor Garbage Collections button - now controlled by Start Use Case button Removed Checkpoint Boundary in the Reference Graph - improved the Pre/post Checkpoint color by criterion JProbe Profiler Improved byte code instrumentation makes your analysis session run faster New Garbage Collection statistics in the Heap Usage window tell you how many garbage collections have occurred and how much total time they took (not available with Track Object Allocation and may not be available with some JVMs) New Native Filter enables you to remove time spent in native methods from the performance data of your methods New Track Object Allocation option lets you decide when you want to collect data on the objects allocated by your methods (collecting object data can take a little longer) JProbe Coverage New jpcovbaseline utility creates a snapshot containing all methods in your application, whether or not they are called by your test case New Class metrics in the Coverage Browser window show the number of classes called by your test cases out of the total number of classes in your application (requires a baseline snapshot created with jpcovbaseline) New Native Filter enables you to remove data on native methods from your coverage analysis Added new extras for JProbe Profiler and JProbe Memory Debugger: JProbe Game Pack demo and tutorials help you to learn how to analyze J2EE applications JProbe Time-based Snapshots servlet enables you to take snapshots of your J2EE application data after an initial delay and at user-defined intervals JProbe Remote Connection Manager add-on can be installed if you need the following features: Download snapshots from the server to your workstation automatically in heterogeneous environments without a file sharing system Disconnect and reconnect a JProbe Console to a remote session in progress Notes: Removed Run Settings tab from the Execution Log temporarily because information can sometimes be incorrect On Windows, the online help is no longer available from the JProbe program group off the Start menu - open the online help from the product's Help menu or see the PDF in the docs directory To run examples, you must add the JProbe installation directory to the class path System Requirements (contents) JProbe products are supported on the following operating systems: Microsoft® Windows® SunTM Solaris® IBM® AIX® HP® HP-UX® Red Hat® Linux® The JProbe Mainframe Suite for z/OS® and OS/390® is also available. For more information, click the Mainframe link available from: java.quest.com/support/jprobe/ For a list of system requirements, supported JVMs, and supported application servers for each platform, see the Installing JProbe Products guide. The guide is available as a PDF file on the CD or as a download from the Web site, and it is also installed to /doc/InstallingJProbeProducts.pdf. Tip: You can avoid potential problems when running JProbe by checking the guide first. It contains important information on Java-related patches for your operating system and notes about the level of support offered on various JVMs. Note: Not all platform configurations can be vigorously tested with each release; however, we will attempt to solve any problems you encounter while working on a supported platform. What's Fixed in the JProbe Suite (contents) Issues fixed for this release: 17078 After a Garbage Monitor filtering error is encountered, the error appears in the system console in all subsequent sessions. Also fixed issue where previously set filters were being silently applied to new sessions. 15918 SDI: Some menus remain open when window loses focus. 13420 In file selection dialogs, the bottom line is missing from the File Type drop-down list display. Workaround: Close the list and then re-open it. 10736, 10733 Printing may not function correctly on some systems. Printing replaced. 10558 The [List] and [Detail] buttons in the file selection dialog box are not functional; [List] is always selected. Disabled both buttons. 9930, 7986 In some cases, you may need to insert a disk into a removable drive (e.g., a Jaz drive) before the file browser dialog box can be displayed. 21910 Profiler: Triggers set on filtered methods may not work. 16873 Profiler: In the Method List window, right-clicking and selecting Source does not always work. 6897 Profiler: The Method Detail window does not print as a single formatted page. Printing replaced. 22666 Memory Debugger: In the Instance Detail View with the Reference Tree selected, the Calculate button may be chopped off or hidden. 22843 Memory Debugger: Cannot print Runtime Heap Summary tables. 22686 Threadalzyer: In the Visualizer, the ID and Description columns may not be displayed by default and the Size to Fit options do not work. Workaround: Resize columns using the column splitters. 22731 jpcovreport: Needs DISPLAY to be set. 11495, 10551 When invoking the online help from a dialog or a window, the help scrollbars do not work. Viewer replaced with JavaHelp. 13891 If you install two versions of JProbe products on the same computer, the help files will refer to the last version installed. 21932 JProbe hangs when run with Sun JDK 1.3.1_01 or later using -hotspot or -client. 22422 Memory Debugger: Segmentation Fault may occur when changing the snapshots to compare in the Snapshot Difference window. Known Issues in the JProbe Suite (contents) This section lists the known issues for the JProbe Suite. The next section, Platform-specific Issues, includes issues only found on some operating systems. If you encounter a problem while using a JProbe product, first check the General Issues (issues affecting all products), then the specific issues for the product you are using, and finally the issues associated with your platform. If the problem is not listed, please report the problem to Quest Software Technical Support. General Issues JProbe Profiler Issues JProbe Memory Debugger Issues JProbe Threadalyzer Issues JProbe Coverage Issues General Issues (top of section) (contents) 27690, 13760 The Execution Log only reports the most significant digit of the OS version used to run the program. 27631 Program menu disappears when selecting a menu item. See also Sun Bug Parade ID 4809393. 27157 Cannot connect JProbe Console when running a Web server and port 4444 is in use. Workaround: Specify a different port number in the JProbe LaunchPad dialog View Runtime Data field, for example, localhost:5555. 26852 IBM JDK 1.3.1 bundled with WebSphere 5.0 has a JVMPI bug that causes instability with Profiler and Memory Debugger. See also IBM PMR 35544,004,000. The JVM is supported, however it is run without the optimizing compiler. 23035 If a snapshot contains two or more methods with the same name, snapshot difference with a similar snapshot calculates the first difference correctly, but not subsequent entries. 22331 JVM hangs when running under load with Tomcat. Workaround: If you notice excessive heap growth without garbage collections followed by an application crash, increase the -Xms, -Xmx parameters or lighten the load so that the JVM has a chance to catch up and do a GC. As the JVM caches data, you can increase the load. 22024 Class names with unusual character may need to be entered manually. 21024 Java programs that use both System.out and System.err for console messages may cause messages to appear intermingled in the Execution Console. Also, program output may be intermingled with JProbe output. 20376 Changing your monitor resolution while running JProbe may hang JProbe. 18246 When running JUnit, the application fails with the following error message: "Failed to invoke suite():java.lang.NoClassDefFoundError:com/klg/jprobe/agentinfo/AgentInfo." Workaround: JUnit uses a custom class loader to reload the code it is testing. You must exclude the JProbe classes (com.klg.* or com.sitraka.*) from reloading as described in the JUnit FAQ: http://junit.sourceforge.net/doc/faq/faq.htm 14049 Double-clicking a menu item that overlaps a button may invoke both processes, causing the JProbe Console to become unstable. 14038 Setting triggers to take snapshots at extremely frequent intervals may cause JProbe Coverage or JProbe Profiler to become unstable. 14033 Deleting a file from the temporary snapshots directory and then selecting it in the JProbe Console causes an IO exception error. 13796, 13711 Keyboard shortcut (accelerator) keys may not function as expected. 11069 JProbe may have difficulty probing applications that contain one or more class files whose byte code size approaches the JVM limit of 65535 bytes. 8810 When multiple windows with the same name are open, selecting a window from the Windows menu is unreliable. Workaround: Select the window by clicking its title bar. 5002 In the Source window, the Methods combo box does not work after sorting on a column. Workaround: Sort by the "Line #" column, and then select a method from the combo box. JProbe Profiler Issues (top of section) (contents) 21475 When using pause and resume triggers, the number of method calls may be miscounted. 19750 Heap Usage graph displays too many time intervals when range is > 5 minutes. 17075 Call Graph window must have focus for the color scale tooltips to appear. 16810 In the Snapshot Difference window, the red lines that indicate relative percentage do not take into account negative numbers. 15622 If there is not enough disk space for a snapshot taken during the session, the session ends and your program exits. 14788 No line information for init and clinit methods. 4946 In the Call Graph window, extraneous edges remain after an isolate or a prune edit. JProbe Memory Debugger Issues (top of section) (contents) 27637 WebLogic 7.0: TimedOut exceptions thrown when running PetStore with a snapshot trigger on com.sun.j2ee.blueprints.catalog.client.CatalogClientHelper.getItem(). 27568 OutofMemoryError reported in console when attempting to connect browser to PetStore. Workaround: Try increasing your virtual memory. 26230 A class loaded multiple times has a number appended to the class name. Filters operate on the class name, so only the first occurrence is matched. 26200 Negative values on status bar and the Heap Usage graph is incorrect when initial heap size is greater than or equal to -Xms2300m. 25290 Sun JDK 1.4.1: Taking snapshots while application is still loading causes java.exe crash. Related to Sun BugParade ID 4507533. 21289 JVMs can give incorrect stack traces when optimizing. Workaround: Disabling optimization and rerunning the session usually improves the stack traces, but may have a significant performance impact. 19750 Heap Usage graph displays too many time intervals when range is > 5 minutes. 15622 If there is not enough disk space for a snapshot taken during the session, the session ends and your program exits. 13970 If a heap trigger sets a checkpoint immediately after program start, the JProbe Console may not register the event. 13715 Some toolbar buttons are not visible in a window. Increase the width of the window to show the buttons. 7882 In the Reference Graph, arrows pointing backward may be hidden by arrows pointing forward. * OutOfMemoryException occurs when multiple temporary snapshots are active. When finished with a snapshot, explicitly unload it. * Using a JIT compiler can cause some programs not to run. Try disabling the JIT and running the session again. JProbe Threadalyzer Issues (top of section) (contents) 27818 Happens Before analyzer reports false positive when using Object.wait(long). 26230 A class loaded multiple times has a number appended to the class name. Filters operate on the class name, so only the first occurrence is matched. 19487 Wait stalls may be misreported as block stalls on IBM JVMs. 19468 False positive data races may be reported with some v.1.3.x JVMs. 18493 Illegal Argument Exception thrown with Deadlock Detection. 17487 When using the Deadlock Detection analyzer with the Sun JVM 1.3.1, displaying call traces can be slower than desired (several seconds). 15703 The Lock Order analyzer will report an out-of-order violation in the case where a thread locks A, B and another locks A, B, and A again. 15679 If two thread problems occur at the same location on the same object, only one warning will be reported even if the problems arise from different call stacks. 14931 The Location column can become too wide for a 1024x768 display. 11546 False positive data race reported when two threads access the same variable on opposites sides of a join(). 11545 Programs with more than 1024 threads may exceed JVMPI limitations and cause the probed VM to hang. 10582 Lock Order analyzer only checks for lock cycles of size 2. 10506 The spin boxes in the JProbe LaunchPad dialog do not spin; single click the arrows. 8647 When using console output, Threadalyzer messages may be interleaved with your program's output. 8624 Synchronization events in native methods under JDK 1.2 VMs may not be tracked, potentially causing false-positive race reports. 8348 When performing data race detection, filters define which fields to track. When performing thread stall detection, filters define which locations can cause a reportable stall. * When attaching to a remote session, ensure that the Verbosity setting in the JProbe Console matches the Verbosity setting that will used by JProbe Analysis Engine. JProbe Coverage Issues (top of section) (contents) 16873 In the Coverage Browser and Method List windows, right-clicking and selecting Source does not always work. 16435 Method rows appear under the wrong Class node when using the "Show Only Methods With Coverage" drop-down list. Workaround: Collapse and expand the package node. If that does not clean up the display, toggle the hit/missed metrics in the Preferences dialog. 14788 Line data for non-contiguous methods, such as constructors, is reported differently in the GUI and reports. - GUI shows line data in multiple methods (e.g., some lines would be in all constructors), but NOT the sum of the information. - Report shows the correct information, but does so by showing nothing for lines "in between" lines that it knows about. 14032 Results may require careful interpretation when analyzing a program that uses a custom class loader. 13914 Choosing to overwrite an existing merged file does not actually overwrite the file; the file is saved with an number appended to the original file name 12801 Source files containing methods with more than 10,000 lines may have hits on the method, but no line data. Platform-specific Issues (contents) Some issues only appear on certain platforms. Review the issues for your platform. Windows Issues Solaris Issues AIX Issues HP-UX Issues Linux Issues General UNIX Platform Issues Windows Issues (top of section) (contents) 25793 Buttons look odd in the LeakExample program when run on Windows NT with JDK 1.4.x. Workaround: Resize the LeakExample window. 23977 Reinstalling JProbe products without first uninstalling an existing installation adds JProbe products to the PATH multiple times. 16067 AMD K6 processors with Sun JDK 1.2.2 and 1.3.0: JProbe products will not run in this environment due to a bug in the Sun Classic JVM 1.2.2 and 1.3 (JavaSoft ID#4427186). In the JProbe LaunchPad dialog, select More, and add this JProbe argument in the Java Options field: -jp_vm_method_collection=builtin. When using jplauncher, you need to ensure this argument is in the input file or on the command line. 14737, 10131 Multi-processor NT systems may cause the JProbe Console to hang. Set the JProbe Console to run on the first processor and the instrumented JVM on the second processor by doing the following: 1. Launch the JProbe product from the command line with the argument: -jp_viewer_process_affinity=1 2. In the JProbe LaunchPad dialog, select More, and add this Java Option: -jp_vm_process_affinity=2 * Guard Page Exception error, stating that a page of memory marking the end of a data structure has been accessed. If you are using JDK 1.2.x with Symantec's just-in-time compiler, disable the JIT and rerun the session. * JProbe products hang when a remote disk drive is mounted but not connected to the network. Exit the JProbe product using Task Manager and disconnect the drive. * On non-Pentium processors that do not implement the Time Stamp Counter, such as a Cyrix 166, elapsed time data in JProbe Profiler will be less accurate because a msec timer is used. Solaris Issues (top of section) (contents) See also: General UNIX Platform Issues Important: See Installing JProbe Products for notes on Solaris patches for Java. 27388 The JProbe Console hangs sporadically. Related to Sun Bug Parade ID 4686894. 27381 Profiler: WebLogic 6.1 terminates during start up when run with JDK 1.3 on Solaris 2.6. Workaround: Add -Xint to your Java Options. 27082 Profiler/Memory Debugger: Tomcat 4.0.2 fails under moderate load when run with JDK 1.3.1_02, _03, or _04, on Solaris 2.6. Workaround: Try the latest version of the JVM. If that does not work, try adding -Xcomp to your Java Options. If all else fails, disable the JIT (-Xint). 22012 JProbe hangs when View Runtime Data is set to Remotely and localhost. Be sure to select Locally if you want to run a session and view results on the same computer. 8250 JProbe products have been tested using the CDE window manager on Solaris. If you use a different X Window manager, such as olwm or Exceed, you may experience display issues. AIX Issues (top of section) (contents) See also: General UNIX Platform Issues Important: See Installing JProbe Products for notes on AIX patches for Java. 22594 Memory Debugger: When setting snapshot triggers on methods in an imported class, snapshots are not taken or the program freezes. IBM JVM issue. * Code executed by a Java 2 JIT compiler is not analyzed correctly. This is a result of defects in both the JDK 1.2.2 and JDK 1.3.0 JIT compilers from IBM. IBM has release fixes for both these problems. * Setting the VM path to /bin does not work. For JDK 1.2.2, the VM path must be set to ../usr/java_dev2/jre/sh/java. For JDK 1.3.0, the VM path must be set to ../usr/java130/jre/bin/java * Profiler/Memory Debugger: Exit Run appears to end the session (registered as VMClosed or VMAborted), but heap and/or performance data is still being collected. Workaround: Close JProbe and any remaining windows. * Coverage: When you terminate your Java program, the session appears to end (registered as Exited) but the Coverage Browser window does not open and the JProbe execution window persists. Workaround: Close the JProbe execution window to continue. * Hummingbird Exceed is not supported for AIX. HP-UX Issues (top of section) (contents) See also: General UNIX Platform Issues Important: See Installing JProbe Products for notes on HP-UX patches for Java and JProbe. 17302 Due to an HP JVM issue, the JProbe Console occasionally crashes when opening a new window and unsaved snapshots may be lost. Workaround: Either use the MDI (JProbe Classic) interface or set your DISPLAY environment variable to equal the IP address of the local computer and disable X access control. For example, using csh you would enter the following commands: xhost + setenv DISPLAY 127.0.0.1:0.0 11645 JProbe products have been tested using the CDE window manager on HP-UX. If you use a different X Window manager, such as olwm or Exceed, you may experience display issues. Linux Issues (top of section) (contents) See also: General UNIX Platform Issues Important: See Installing JProbe Products for notes on supported glibc and kernal for Linux. 20768 Coverage: In SDI, the toolbar buttons in the Source window may become disabled after the Methods drop-down list is used. 17665 Running JProbe Threadalyzer with the Blackdown JVM 1.2.2 may cause JProbe products to hang or crash. 16682 On Linux platforms, JProbe products consume, permanently, one communication port per session run. Workaround: Change the port number each session. 11645 JProbe products have been tested using the Enlightenment window manager (GNOME desktop environment) on Red Hat Linux. If you use a different X Window manager, such as olwm or Exceed, you may experience display issues. General UNIX Platform Issues (top of section) (contents) 21318 Paths that are selected using the file chooser dialogs, such as the path to the JVM or the Snapshot Directory, are expanded to eliminate symbolic links. If you need to use the path with the symbolic link, enter the path by hand. * Opening a snapshot file from a remote NFS mounted directory consumes excessive amounts of memory. In general, avoid remotely opening files greater than 5 MB. Frequently Asked Questions (contents) Do JProbe products run on Multi-processor NT 4 and Windows 2000 systems? Yes. JProbe products have been tested on 1- and 2-processor Windows NT 4 and Windows 2000 systems. Do JProbe products run on Multi-processor Solaris systems? Yes. JProbe products have been tested on 1-, 2- and 4-processor Solaris systems. Do JProbe products run on Multi-processor Linux systems? Yes. JProbe products have been tested on 1- and 2-processor Linux systems. Do JProbe products run on Multi-processor AIX systems? Yes. JProbe products have been tested on 1- and 2-processor AIX systems. When I try to profile my application, I get a dialog box stating that "An unsupported version of the Java VM has been found." For supported JVMs, see the System Requirements section for your platform in Installing JProbe Products and, for recent updates, visit the Supported Platforms page under JProbe Technical Support on the Quest Software Web site. I am unable to profile my application. When I try to profile it, I get a message in the system console window stating "Can't find class." This often occurs when the CLASSPATH has not been set correctly. Ensure that you have specified your classpath in the JProbe LaunchPad dialog in the same manner as you would when running your application normally. The Java VM crashes (with an Application Error or core dump) or your program appears unstable during analysis. If this error occurs, try running the session without the JIT or other optimizing compiler. Type one of the following in the Java Options field: For SDK 1.4.0, type: -Xint For SDK 1.3.1, type: -Xint (IBM continues to use -Djava.compiler=NONE) For JDK 1.2.x, type: -Djava.compiler=NONE Note: This will cause your program to run significantly slower. Contacting Quest Software (contents) During the transition from Sitraka to Quest Software, please continue to use the Sitraka email addresses to contact members of the JProbe team. If you encounter any problems, please see the Quest Software Web site for updated information. We welcome any suggestions, bug reports, or comments you may have. For customer support, please send email to: jprobe_support@sitraka.com To send general comments to the JProbe Development Team, send email to: jprobe_suggestionbox@sitraka.com Please do not send questions to the "suggestionbox" alias, no response will be provided. Direct questions to the "support" alias. Visit our Web site to get the latest information: java.quest.com. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.