如果我使用 Windbg 转储在 Windows 上运行的 Java 进程
我可以(轻松地)分析 Java 堆、对象和线程吗?
就像我可以为 .Net 进程使用 SOS 一样?
否则 - 我如何离线调试生产系统上发生的问题?
谢谢!
最佳答案
Windows 小型转储 (.dmp) 可以与这些实用程序一起使用:
jvisualvm
来自 JDK 的实用程序可以为您提供线程转储和堆转储- 打开
jvisualvm
- 在
Applications
Pane 中,找到VM Coredumps
- 右键单击它
- 选择
添加 VM Coredump...
- 浏览到您的
.dmp
小型转储文件 - 按
确定
- 右键单击
VM Coredumps
下的新项目 - 选择
线程转储
- 重复
堆转储
- 打开
jstack
来自 JDK 的实用程序可以显示来自 Windows 小型转储 (.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 小型转储 (.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
关于java - Java进程的dump文件分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3883029/