如果我使用Windbg转储在Windows上运行的Java进程
我可以(简单地)分析Java堆,对象和线程吗?
就像我可以用SOS进行.Net过程一样?
否则 - 我如何离线调试生产系统上发生的问题?
谢谢!
有一个Java堆分析工具
jvisualvm可用于加载转储然后进行分析
编辑:
这是JDK redist ...
Windows minidumps(.dmp)可以与以下实用程序一起使用:
jvisualvm
JDK的实用程序可以使您同时进行线程转储和堆转储
打开 jvisualvm
在Applications
窗格中,找到VM Coredumps
右键点击
选择 Add VM Coredump...
浏览到您的.dmp
minidump文件
按 OK
右键单击下面的新项目 VM Coredumps
选择 Thread Dump
重复 Heap Dump
jstack
JDK中的实用程序可以显示Windows minidumps(.dmp)中的Java堆栈
这是一个批处理脚本:
:: 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
JDK的实用程序可以将Windows minidump(.dmp)转换为Java堆转储(.hprof)
这是一个批处理脚本:
:: 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