Fully featured low overhead profiler for Java EE and Java SE platforms.
Performance monitoring and profiling of Jenkins, TeamCity, Gradle, Maven, Ant, JUnit and TestNG.
Easy to use performance and memory profiler for .NET framework.

Recording CPU information. Sampling and tracing.

When the profiler is connected to the profiled application, the toolbar contains the following CPU profiling controls:

  • Start/Stop CPU profiling (1)
  • Clear CPU profiling results and continue profiling (2)

Start CPU profiling

To begin obtaining profiling results, start CPU measuring when your application requires it.

You can choose either of two available measurement modes: sampling or tracing.

Sampling Tracing
Measured time accuracy High for long running methods, low for short running methods Low to high, depending on profiled application and settings
Invocation counts Not available Available
Overhead Negligible unless high-level profiling is enabled Low to high, depending on profiled application and settings

  • Sampling

    When sampling is used, the profiler periodically queries stacks of running threads to estimate the slowest parts of the code. No method invocation counts are available, only CPU time.

    Sampling is typically the best option when your goal is to locate and discover performance bottlenecks. With sampling, the profiler adds virtually no overhead to the profiled application.

    You can configure some CPU sampling aspects with CPU sampling settings.

  • Tracing

    When tracing, the profiler watches method invocations for recording thread CPU time spent inside each profiled method. Both times and invocation counts are available.

    Although tracing provides more information, it has its drawbacks. First, it may noticeably slow down the profiled application, because the profiler executes special code on each enter to and exit from the methods being profiled. The greater the number of method invocations in the profiled application, the lower its speed when tracing is turned on.

    The second drawback is that, since this mode affects the execution speed of the profiled application, the CPU times recorded in this mode may be less adequate than times recorded with sampling. Please use this mode only if you really need method invocation counts.

    To control profiling overhead and accuracy of the results use CPU tracing settings.

After selecting the profiling options, start profiling as follows:

Live results

When CPU profiling is started, the results are immediately available in "Call tree" (with threads merged) and "Method list" tabs.

In case of CPU tracing, both method times and invocation counts are shown. In case of CPU sampling, only times are shown.

The live view provides only basic information. To perform comprehensive analysis, capture performance snapshot, open it and use the full featured CPU view.

Finish measuring and get the results

When the task you intended to profile has finished (or has performed for a sufficient amount of time), capture a performance snapshot with all the recorded information.

When this is done from the profiler UI, you can open the results for immediate analysis.

Further topics in this section describe the profiler's UI for analyzing CPU profiling results.


  • You can start and stop CPU profiling during the execution of your application as many times as you want. When CPU profiling is not running, the profiler adds no performance overhead to application being profiled.
  • In some cases, it also may be useful to launch the application with CPU profiling already started and/or automatically capture performance snapshot on exit of the profiled application (see Startup options).
  • CPU profiling can be performed programmatically with the help of the Profiler API.