views:

3937

answers:

3

I run JVisualVM (Windows XP, Sun Java 1.6.0.13, 32 bit client VM) to monitor a distant application (Linux, Sun Java 1.6.0.07, 64 bit server VM). Before starting the actual remote application, I launch on the remote machine jstatd using an all access policy:

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

Then I start the actual app using the command line

 java -Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=3333 
compileTest.Main

From the client machine, I can see the distant app and monitor it. I can also make a thread dump etc. Unfortunately, the heap-dump button is grayed out.

How can I obtain a heap-dump from a remotely monitored application using JVisualVM?

I tried using jConsole. With jConsole it is possible to make a distant heap dump using the com.sun.management.HotSpotDiagnostic dumpHeap operation. I want the dump to be transferred to the client side and analyzed using the tools provided by JVisualVM. How can I do this?

A: 

You cannot analyze the heap remotely. You could run visualvm on your server and export the x session to your local machine. You would have to have x11 installed on your server which many servers do not.

Ichorus
+2  A: 

Unfortunately there isn't an automated way to do this. You'll have to run jmap manually on the Linux server to dump the heap of your JVM and then copy the resultant heap dump to your local machine running JVisualVM and use File|Load... to load the heap dump into JVisualVM for analysis.

Yeroc
+1  A: 

There is a way to do it!

  1. rmiregistry -J-Xbootclasspath/p:$JAVA_HOME/lib/sa-jdi.jar ( this uses port 1099)
  2. start 'jsadebugd' on the machine in which application is running: jsadebugd & (pid of JVM)
  3. On remote machine use following jmap -dump:file= :1099

  4. jhat

The above will start a web application at port 7000

All the above tools are part of JDK 1.6

All the best!

would this result in a performance penalty for the running app? perhaps that doesn't matter.
Will Glass