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!
Windows minidumps (.dmp) can be used with these utilities:
jvisualvm
utility from JDK can get you both thread dump and heap dump
jvisualvm
Applications
pane, find VM Coredumps
Add VM Coredump...
.dmp
minidump fileOK
VM Coredumps
Thread Dump
Heap Dump
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
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