Java进程的dump文件分析?
Posted
技术标签:
【中文标题】Java进程的dump文件分析?【英文标题】:Dump file analysis of Java process? 【发布时间】:2011-04-22 10:24:16 【问题描述】:如果我使用 Windbg 转储 Windows 上运行的 Java 进程
我可以分析(轻松吗?)Java 堆、对象和线程?
就像我可以对 .Net 进程使用 SOS 一样?
否则 - 我如何离线调试生产系统上发生的问题?
谢谢!
【问题讨论】:
【参考方案1】:Windows minidumps (.dmp) 可以与这些实用程序一起使用:
来自 JDK 的jvisualvm
实用程序可以为您提供线程转储和堆转储
jvisualvm
在Applications
窗格中,找到VM Coredumps
右键单击它
选择Add VM Coredump...
浏览到您的.dmp
minidump 文件
按OK
右击VM Coredumps
下的新项目
选择Thread Dump
重复Heap Dump
来自 JDK 的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
来自 JDK 的jmap
实用程序可以将 Windows minidump (.dmp) 转换为 java heap dump (.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
【讨论】:
我知道这是一个旧线程,但是 - 当我尝试打开通过任务管理器(64 位 Java 进程/应用程序)创建的 DMP 文件时,我收到以下错误:“c:\Temp\ ApplicationName.DMP 不是有效的核心转储!”我已经尝试过使用 visualvm 而不是 jvisualbv,但它没有显示“VM Coredumps”选项。 嗨@BrianBooth,我从任务管理器生成了我的.dmp
文件,方法是右键单击java.exe
,然后单击Create dump file
。然后,我按照 Codeguard 为jvisualvm
描述的步骤进行操作,效果很好。您是否从java
进程创建了转储文件?我通过为Chrome
进程创建转储文件来重现您的错误,当我尝试在jvisualvm - VM Coredumps
下添加项目时,它告诉我chrome.DMP is not a valid core dump!
【参考方案2】:
jvisualvm 可用于加载转储然后分析它
编辑:
这来自于 JDK redist...
【讨论】:
该工具可用于查看 Windows 故障转储文件 (.dmp)?我没有办法做到这一点。 @Bryan Java 堆转储;您可以在工具内转储;提供您正在监控的 JVM 状态的时间点。【参考方案3】:有一个Java Heap Analysis Tool
【讨论】:
据我了解,它无法打开有问题描述的 windows minidumps (.dmp)【参考方案4】:NetBeans 6.9.1 可以加载 .hprof 文件(配置文件 -> 加载堆转储)。然后,例如,您可以搜索最大的物体并查看它的内部结构。
【讨论】:
以上是关于Java进程的dump文件分析?的主要内容,如果未能解决你的问题,请参考以下文章