5 Profiling Applications

HPjmeter allows you to process profile data from Java virtual machines.

Separating the profile data collection step from the analysis step has the following advantages:

The data analysis can be done at a different time and on a different platform than was used to run the application. For example, it can be done on a desktop system or on a laptop.

A non-interactive profiling agent will often impose less overhead than an interactive one.

The profile data files obtained naturally facilitate comparison of different runs or creation of a history of performance improvements.

The -Xeprof profiling option, available for the HP-UX HotSpot™ VM, was specifically designed to produce profile data files for HPjmeter. This option works well to capture performance data for viewing, and now can be accessed during a program run, as well as when starting an application.

-Xeproffocuses primarily on performance problems that characterize large server applications. Its relatively low overhead allows you to collect performance data such as the delay caused by lock contention, actual CPU time used by Java methods, and actual profiler overhead.

Using the -Xeprof switch on HP-UX 11.31:

For best results when using the -Xeprofswitch on HP-UX 11.31 on Integrity systems, you should run Java 1.5.0.14 or later, or 6.0.02 or later, because the thread timing data generated by earlier releases of Java can be inaccurate on 11.31.

How to tell when the thread timing data is off: Because Java can generate an eprof data file with no errors or other indication of a problem in this situation, you may not know the file is inaccurate until you try to open it with HPjmeter. Then, HPjmeter will either refuse to load the file, or it will load the file, but display unusual results.

If HPjmeter refuses to load the file, it will display an error message such asNumber format error at line NNN. Cannot continue.

If HPjmeter does load the file, you will see unexpected and inaccurate results in the metric displays. The unexpected results can be seen most easily by examining the Threads Histogram. If you see many threads spending all their time in an unexpected state, such as "Unknown" or "Lock Contention", then you are experiencing the problem with inaccurate data. Update your Java installation to one of the versions mentioned above to correct the problem.

Although many features of HPjmeter are available only when -Xeprofis used to capture the profile data, useful profile data can be obtained from almost any JVM. No special compilation or preprocessing of the application code is needed, and you do not need to have access to the source code to get the profiling data for a Java program.

This guide also presents information on running the JVM with -agentlib:hprof , which also provides numerous statistics, some of which are especially useful for detailed profiling of memory usage).

Profiling Overview

Profiling an application means investigating its runtime performance by collecting metrics during its execution. One of the most popular metrics is method call count - this is the number of times each function (method) of the program was called during a run. Another useful metric is method clock time - the actual time spent in each of the methods of the program. You can also measure the CPU (central processing unit) time, which directly reflects the work done on behalf of the method by any of the computer's processors. This does not take into account the I/O, sleep, context switch, or wait time.

58 Profiling Applications