Java – Dump file analysis of Java process

debuggingjavawindbg

If I take dump, using Windbg, of Java process running on Windows

Can I analyze (easly?) the Java heap, objects, and threads?

Just like I could do with SOS for .Net process?

Otherwise – how can I offline debug a problem happening on production systems?

Thanks!

Best Answer

Windows minidumps (.dmp) can be used with these utilities:

  1. jvisualvm utility from JDK can get you both thread dump and heap dump

    • Open jvisualvm
    • In the Applications pane, find VM Coredumps
    • Right-click it
    • Select Add VM Coredump...
    • Browse to your .dmp minidump file
    • Press OK
    • Right-click the new item under VM Coredumps
    • Select Thread Dump
    • Repeat for Heap Dump
  2. jstack utility from JDK can show Java stack from Windows minidumps (.dmp)

    Here's a batch script for that:

    :: Shows java stack from Windows minidumps
    :: Argument %1: Path to minidump
    @ECHO OFF
    
    SET JDK_PATH=C:\Program Files\Java\jdk1.8.0_181\bin
    
    "%JDK_PATH%\jstack.exe" "%JDK_PATH%\java" "%~1"
    PAUSE
    
  3. jmap utility from JDK can convert Windows minidump (.dmp) to java heap dump (.hprof)

    Here's a batch script for that:

    :: Converts Windows minidump to Java heap dump (.hprof)
    :: Argument %1: Path to minidump
    @ECHO OFF
    
    SET JDK_PATH=C:\Program Files\Java\jdk1.8.0_181\bin
    
    "%JDK_PATH%\jmap.exe" -F -dump:format=b,file="%~dpn1.hprof" "%JDK_PATH%\java" "%~1"
    PAUSE