如果我使用 Windbg 转储 Windows 上运行的 Java 进程
我可以(容易吗?)分析 Java 堆、对象和线程吗?
就像我可以使用 SOS 进行 .Net 进程一样吗?
否则 - 如何离线调试生产系统上发生的问题?
Thanks!
Windows 小型转储 (.dmp) 可以与以下实用程序一起使用:
-
jvisualvm
JDK 中的实用程序可以获取线程转储和堆转储
- Open
jvisualvm
- In the
Applications
窗格,找到VM Coredumps
- 右键单击它
- Select
Add VM Coredump...
- 浏览到您的
.dmp
小型转储文件
- Press
OK
- 右键单击下面的新项目
VM Coredumps
- Select
Thread Dump
- 重复进行
Heap Dump
-
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 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)