Frequently Asked Questions


  1. Does HPjmeter require HP-UX Java technology to run or will it work on other platforms as well?
  2. Can HPjmeter be used to analyze profiling data obtained on another platform?
  3. I specified a profiling option for the Java VM, but received no profile data file, or the file is incomplete. What's wrong?
  4. One of the entries in the profile data is labeled <unknown caller>. What is that?
  5. What is the unit of the timing data displayed by HPjmeter?
  6. Is it possible to see the performance data for a specific thread only?
  7. Is it possible to see the performance data for a specific time slice only?
  8. I'm looking at an Inclusive Method Time metric, and the reported time for one or more of the methods is very large, even larger than the total running time of the application. What's wrong?
  9. I'm trying to expand one of the Call Graph Tree nodes, but I cannot see any children.
  10. How can I use the slider for the Call Graph Tree pruning for precise adjustments?
  11. I can see multiple entries at the top level of the Call Graph Tree. Why is that?
  12. Guess - Lock Contention reported a method which is neither synchronized, nor uses the synchronized statement. Why is that?
  13. After reading the profile data, HPjmeter displays the running time of the application which is completely wrong. Is this a bug?
  14. I have a suggestion for improvement of HPjmeter. How can I report it?

[Back]

Answers


  1. Does HPjmeter require HP-UX Java technology to run or will it work on other platforms as well?
    HPjmeter is written entirely in Java, so it should run on any platform supporting Java 1.1 or Java 2. However, if you are using Java 1.1, you will additionally need the Swing 1.1 package, available from the Java Foundation Classes site (http://java.sun.com/products/jfc/download.html).

  2. Can HPjmeter be used to analyze profiling data obtained on another platform?
    Probably, if you used Java 1.1 to obtain the profile data. For Java 2, currently the only versions of hprof supported are the ones enclosed with HP-UX SDK for the Java 2 platform, version 1.2.2 (Classic Virtual Machine), and JavaSoft's JDK-1.2.1-A or JDK-1.3.0-C (for Solaris(TM) Operating Environment, or Windows(R) NT(R)), or compatible.

  3. I specified a profiling option for the Java VM, but received no profile data file, or the file is incomplete. What's wrong?
    Most probably you tried to read the data file before the application completed. Also, remember that the VM must terminate naturally, either by exiting all threads, or by a call to System.exit(). Sometimes it will be necessary to modify the application code slightly to achieve this. Killing the VM process does not produce profile data.

  4. One of the entries in the profile data is labeled <unknown caller>. What is that?
    The profiling information is collected by the Java virtual machine at the entry and exit points of each method. Whenever the virtual machine cannot identify the calling method, it assigns it the name <unknown caller>. Therefore more than one method can be represented by the <unknown caller> name. Usually the reason for not being able to recognize the caller is that it was not a Java method. For all practical purposes, you can assume that the <unknown caller> entry represents the virtual machine itself.

  5. What is the unit of the timing data displayed by HPjmeter?
    For sampling, hprof uses a varying sampling interval to keep the overhead at a reasonable level. When profiling by tracing, the Java virtual machine measures the time in milliseconds. However, the profiling intrusion can be very large. In the HotSpot VM intrusion for SPECjvm98 (http://www.spec.org/) can be as low as 3x. In extreme cases, however, profiling an application can result in a 10 times or greater slow-down. In effect, the real meaning of time is often lost. It is best to view the timing values as if they were measured in some abstract and platform-dependent time units.

  6. Is it possible to see the performance data for a specific thread only?
    Yes, if you use the -Xeprof option for the HotSpot JVM, the thread=y option for Java 2 hprof, or the -eprof option for Java 1.1.

  7. Is it possible to see the performance data for a specific time slice only?
    No, but if you'd like to use a large time slice, you can try the following trick. Profile your application twice. The first time run it only up to the beginning of the intended time slice. The second time run it up to the end of the slice. You will get two data files which you can compare using HPjmeter. Assuming that both runs were performed in very similar environments, this could give you estimated metrics for your time slice.

  8. I'm looking at an Inclusive Method Time metric, and the reported time for one or more of the methods is very large, even larger than the total running time of the application. What's wrong?
    Possibly nothing is wrong. Such timing values can be reported for recursive functions. Each invocation of the function "collects" its own time. So depending on the depth of recursion, the total may be even greater than the application running time. Another reason for this apparent anomaly is that multiple threads can be spending time within the function.

  9. I'm trying to expand one of the Call Graph Tree nodes, but I cannot see any children.
    It may happen that all outcoming branches from this node have timing values that are less than the current cut-off value. In such cases no children will be displayed.

  10. How can I use the slider for the Call Graph Tree pruning for precise adjustments?
    You can do two things. One is to click on a side of the slider knob, which adjusts the cut-off value by 1. The other is to enlarge the whole tree pruning dialog window to fill the width of the screen. It is best to adjust the cut-off value when the tree is still small.

  11. I can see multiple entries at the top level of the Call Graph Tree. Why is that?
    For the Process scope, each thread is likely to generate one entry which was seen calling others, but not being called itself. Such methods are placed at the top level. Another reason for multiple roots of the call graph is that the profiling agent never saw what called these methods. This happens, for example, when using the java.lang.reflect package.

  12. Guess - Lock Contention reported a method which is neither synchronized, nor uses the synchronized statement. Why is that?
    It can happen. HPjmeter does not have the information about the monitor locks, so it only guesses which method's execution got delayed, using the timing data.

  13. After reading the profile data, HPjmeter displays the running time of the application which is completely wrong. Is this a bug?
    If you used -prof to collect the profile data, HPjmeter can only guess the running time. In most cases, it does a good job at estimating. However in some extreme cases, the estimate can be even an order of magnitude wrong.

  14. I have a suggestion for improvement of HPjmeter. How can I report it?
    Please send e-mail to java-tools-support@cup.hp.com.

[Back]

Trademark Acknowledgement
Solaris is a trademark of Sun Microsystems, Inc. in the U.S. and other countries.
Windows NT is a U.S. registered trademark of Microsoft Corporation.