- Does HPjmeter require HP-UX Java
technology to run or will it work on other platforms as well?
- Can HPjmeter be used to analyze profiling
data obtained on another platform?
- I specified a profiling option for the Java VM,
but received no profile data file, or the file is incomplete. What's wrong?
- One of the entries in the profile data
is labeled
<unknown
caller>. What is that?
- What is the unit of the timing data displayed
by HPjmeter?
- Is it possible to see the performance data
for a specific thread only?
- Is it possible to see the performance data
for a specific time slice only?
- 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?
- I'm trying to expand one of the Call Graph Tree
nodes, but I cannot see any children.
- How can I use the slider for the Call Graph Tree
pruning for precise adjustments?
- I can see
multiple entries at the top level of the Call Graph Tree.
Why is that?
- Guess - Lock Contention reported
a method which is neither synchronized, nor uses the
synchronized statement. Why is that?
- After reading the profile data, HPjmeter
displays the running time of the application which is completely wrong.
Is this a bug?
- I have a suggestion for improvement of HPjmeter.
How can I report it?
[Back]
Answers
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.