Luke Luke - 7 months ago 158
Java Question

Why won't the VisualVM Profiler profile my application?

I've created a simple 1 file java application that iterates through a loop, calls some functions, allocates some memory, adds some numbers, etc. I run that application via eclipse's

Run As->Java Application
.

The running application shows up in Java VisualVM under
Local
.

I double click on that application and go to the Profiler tab.

The default settings are:

Start profiling from classes: my.main.package.**


Do not profile classes: java.*, javax.*,
sun.*, sunw.*, com.sun.*


I click on
CPU
. The
CPU
and
Memory
buttons gray out. Nothing happens.

The
Status
says
profiling inactive
.

When my application terminates the
Status
says
application terminated
.

What am I doing wrong here? Are there some settings I need to tweak? Do I need to set a VM flag when I launch my application?

Answer

I'd guess the issue relates to the application being started from within Eclipse, this is because JVisualVM expects to find data in the java.io.tmpdir directory (usually C:\Users\[your username]\AppData\Local\Temp\hsperfdata_[your username] on a Windows system).

I assume rather than in the normal location where JPS, JVisualVM etc. expects it, Eclipse puts the data in it's own temp folder?

If so, try invoking JVisualVM using jvisualvm -J-Djava.io.tmpdir=[Eclipse's temp directory] to explicitly tell it where that data is.

If you can't find the hsperfdata_$USER folder, try just running your application outside Eclipse in the usual command line Java way.

Also note that there was a bug affecting the temp folder (case sensitivity) introduced around 1.6.0_23, so maybe you'd benefit by updating to a more recent Java 6 (or 7) build?