如果我使用Windbg转储在Windows上运行的Java进程
我可以(简单地)分析Java堆,对象和线程吗?
就像我可以使用SOS进行.Net流程一样?
否则 - 如何离线调试生产系统上发生的问题?
谢谢!
答案 0 :(得分:5)
答案 1 :(得分:5)
答案 2 :(得分:1)
Windows小型转储(.dmp)可以与以下实用程序一起使用:
jvisualvm
实用程序可以使您同时进行线程转储和堆转储
jvisualvm
Applications
窗格中,找到VM Coredumps
Add VM Coredump...
.dmp
小型转储文件OK
VM Coredumps
下的新项目Thread Dump
Heap Dump
jstack
实用程序可以显示Windows minidump(.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
实用程序可以将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
答案 3 :(得分:0)
NetBeans 6.9.1可以加载.hprof文件(Profile - > Load Heap Dump)。然后,例如,您可以搜索最大的对象并查看它的内部结构。