Java进程的转储文件分析?
如果我使用Windbg转储在Windows上运行的Java进程
我可以(简单地)分析Java堆,对象和线程吗?
就像我可以用SOS进行.Net过程一样?
否则 – 我如何离线调试生产系统上发生的问题?
谢谢!
有一个Java堆分析工具
jvisualvm可用于加载转储然后进行分析
编辑:
这是JDK redist …
NetBeans 6.9.1可以加载.hprof文件(Profile – > Load Heap Dump)。 然后,例如,您可以搜索最大的对象并查看它的内部。
Windows minidumps(.dmp)可以与这些实用程序一起使用:
-
JDK的
jvisualvm
实用程序可以为您提供线程转储和堆转储- 打开
jvisualvm
- 在“
Applications
窗格中,找到VM Coredumps
- 右键单击它
- 选择
Add VM Coredump...
- 浏览到
.dmp
minidump文件 - 按
OK
- 右键单击
VM Coredumps
下的新项 - 选择
Thread Dump
- 重复
Heap Dump
- 打开
-
JDK的
jstack
实用程序可以显示来自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
-
JDK的
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